广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于Qt实现SVG图片浏览器
  • 117
分享到

基于Qt实现SVG图片浏览器

2024-04-02 19:04:59 117人浏览 八月长安
摘要

目录介绍一、项目介绍二、项目基本配置三、UI界面设计四、主程序实现4.1 .pro文件4.2 添加SvgWindow类4.3 添加SvgWidget类4.4 svgwidget.h头

介绍

SVG的英文全称是Scalable Vector Graphics,即可缩放的矢量图形。它是由万维网联盟(W3C)在2000年8月制定的一种新的二维矢量图形格式,也是规范中的网格适量图形标准,是一个开放的图形标准。

SVG格式的特点如下:

(1)基于XML

(2)采用文本来描述对象

(3)具有交互性和动态性

(4)完全支持DOM

SVG相对于GIF、JPEG格式的优势是,SVG是一种矢量图形格式,比GIF、JPEG等栅格格式具有众多优势,如文件小、可任意缩放而不破坏图像的清晰度和细节等。
Qt为SVG格式图片的显示与生成提供了专门的QtSvg模块,此模块中包含了与SVG图片相关的所有类,主要有QSvgWidget、QSvgRender和QGraphiCSSvgitem。

一、项目介绍

利用QtSvg实现SVG图片浏览器,可以显示SVG结尾的文件图片。

二、项目基本配置

新建一个Qt案例,项目名称为“SVGTest”,基类选择“QMainWindow”,取消创建UI界面复选框的选中状态,完成项目创建。

三、UI界面设计

无UI界面

四、主程序实现

4.1 .pro文件

如果是QT5版本,需要在pro工程文件中加入一行代码:

QT+=svg

如果是QT6版本,需要在pro工程文件中加入一行代码:

QT+=svgwidgets

【不同Qt版本,添加的qmake不相同,这里建议参考帮助文档:】

4.2 添加SvgWindow类

项目名——>鼠标右键——>Add New——>c++ Class——>添加如下内容

创建完成后,项目中会出现svgwindow.h和svgwindow.cpp。

4.3 添加SvgWidget类

项目名——>鼠标右键——>Add New——>C++ Class——>添加如下内容

创建完成后,项目中会出现svgwidget.h和svgwidget.cpp,如下所示:

4.4 svgwidget.h头文件

SvgWidget类继承自QSvgWidget类,主要显示SVG图片。

在public中声明一下响应鼠标的滚动事件,使SVG图片可以通过鼠标滚动进行缩放,然后声明render变量,用于图片显示尺寸的确定:

#include <QSvgWidget>
#include<QtSvg>
#include<QSvgRenderer>
public:
    void wheelEvent(QWheelEvent *);//响应鼠标的滚动事件,使SVG图片可以通过鼠标滚动进行缩放
private:
    QSvgRenderer *render;//用于图片显示尺寸的确定

4.5 svgwidget.cpp源文件

SvgWidget函数获得本窗体的QSvgRenderer对象,代码如下:

SvgWidget::SvgWidget()
{
    render=renderer();
}

然后定义鼠标滚轮的响应事件,使SVG图片可以通过鼠标滚动进行缩放:

void SvgWidget::wheelEvent(QWheelEvent *e)
{
    const double diff=0.1;//diff的值表示每次滚轮滚动一定的值,图片大小改变的比例
    //用于获取图片显示区的尺寸
    QSize size=render->defaultSize();
    int width=size.width();
    int height=size.height();
    //利用QWheelEvent的相关函数获得滚轮滚动的距离值,通过此值判断滚轮滚动的方向
    //若此值大于0,则表示滚轮向前(远离用户方向)滚动;
    //若此值小于0,则表示滚轮向后(靠近用户方向)滚动;
    //Qt6使用e->angleDelta().y()
    //Qt5请使用e->delta()
    if(e->angleDelta().y()>0){
        //对图片的长、宽值进行放大
        width=int(this->width()+this->width()*diff);
        height=int(this->height()+this->height()*diff);
    }else{
        //对图片的长、宽值进行缩小
        width=int(this->width()-this->width()*diff);
        height=int(this->height()-this->height()*diff);
    }
    resize(width,height);//重新调整大小
}

4.6 svgwindow.h头文件

SvgWindow类继承自QScrollArea,是一个带滚动条的显示区域。在SvgWindow类实现包含"svgwidget.h"的头文件,该类使图片在放大到超过主窗口大小时,能够通过拖拽滚动条的方式进行查看。

添加代码如下:

#include"svgwidget.h"
public:
    void setFile(QString);
    void mousePressEvent(QMouseEvent *);
    void mouseMoveEvent(QMouseEvent *);
private:
    SvgWidget *svgWidget;
    QPoint mousePressPos;
    QPoint scrollBarValuesMousePress;

4.7 svgwindow.cpp源文件

主函数内进行设置滚动区的窗体,使svgWidget成为SvgWindow的子窗口:

    svgWidget=new SvgWidget;
    setWidget(svgWidget);

当主窗口中对文件进行了选择或修改时,调用setFile()函数设置新的文件:

//设置新的文件
void SvgWindow::setFile(QString filename){
    svgWidget->load(filename);//将新的SVG文件加载到svgWidget中进行显示
    QSvgRenderer *render=svgWidget->renderer();
    svgWidget->resize(render->defaultSize());//按照SVG文件的默认尺寸进行显示
}

鼠标按下时,获取水平滚动条和垂直滚动条的值:

//鼠标按下响应函数
void SvgWindow::mousePressEvent(QMouseEvent *e)
{
    mousePressPos=e->pos();
    scrollBarValuesMousePress.rx()=horizontalScrollBar()->value();
    scrollBarValuesMousePress.ry()=verticalScrollBar()->value();
    e->accept();
}

当鼠标键按下并且拖拽鼠标时触发mouseMoveEvent()函数,通过滚动条的位置设置实现图片拖拽效果:

//鼠标按下且拖拽响应函数
void SvgWindow::mouseMoveEvent(QMouseEvent *e)
{
    horizontalScrollBar()->setValue(scrollBarValuesMousePress.x()-
                                    e->pos().x()+mousePressPos.x());//对水平滚动条的新位置进行设置
    verticalScrollBar()->setValue(scrollBarValuesMousePress.y()-
                                  e->pos().y()+mousePressPos.y());//对垂直滚动条的新位置进行设置
    horizontalScrollBar()->update();
    verticalScrollBar()->update();
    e->accept();
}

4.8 mainwindow.h头文件

头文件中包含"svgwindow.h"头文件,并且声明打开文件菜单的槽函数和svgwindow用于调用相关函数传递选择的文件名:

#include"svgwindow.h"

public slots:
    void slotOpenFile();//打开文件槽函数

private:
    SvgWindow *svgwindow; //用于调用相关函数传递选择的文件名

4.9 mainwindow.cpp源文件

主窗口MainWindow包含一个菜单栏,其中有一个“文件”子菜单,包含一个“打开”菜单项,代码如下:

    setWindowTitle("SVG Viewer");//设置窗口标题
    QMenu *fileMenu=menuBar()->addMenu("文件");//菜单栏添加"文件"
    QAction *openAct=new QAction("打开",this);//"文件"中添加"打开"子菜单
    connect(openAct,SIGNAL(triggered()),this,SLOT(slotOpenFile()));//点击打开触发slotOpenFile()槽函数
    fileMenu->addAction(openAct);
    svgwindow=new SvgWindow;
    setCentralWidget(svgwindow);
    resize(800,600);//初始大小

定义打开菜单的槽函数:

//打开菜单的槽函数
void MainWindow::slotOpenFile()
{
    QString name=QFileDialog::getOpenFileName(this,"打开","/","svg files(*.svg)");
    svgwindow->setFile(name);
}

五、效果演示

以上就是基于Qt实现SVG图片浏览器的详细内容,更多关于Qt SVG图片浏览器的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Qt实现SVG图片浏览器

本文链接: https://www.lsjlt.com/news/151823.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Qt实现SVG图片浏览器
    目录介绍一、项目介绍二、项目基本配置三、UI界面设计四、主程序实现4.1 .pro文件4.2 添加SvgWindow类4.3 添加SvgWidget类4.4 svgwidget.h头...
    99+
    2022-11-13
  • 基于Qt如何实现SVG图片浏览器
    本篇内容主要讲解“基于Qt如何实现SVG图片浏览器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Qt如何实现SVG图片浏览器”吧!介绍SVG的英文全称是Scalable Vector Gra...
    99+
    2023-07-02
  • Qt怎么实现图片浏览器
    这篇文章主要介绍了Qt怎么实现图片浏览器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt怎么实现图片浏览器文章都会有所收获,下面我们一起来看看吧。图片浏览器逻辑实现图片浏览器用到了前面几乎所有的知识,包括窗口...
    99+
    2023-07-05
  • Qt实战之实现图片浏览器
    目录图片浏览器逻辑效果图具体实现utils.himage.himage_group.himage_group.cppqimgviewwidget.hqimgviewwidget.cp...
    99+
    2023-03-19
    QT实现图片浏览器 QT图片浏览器 QT图片
  • 如何利用QT实现图片浏览器
    这篇文章主要介绍了如何利用QT实现图片浏览器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何利用QT实现图片浏览器文章都会有所收获,下面我们一起来看看吧。1、概述案例:制作一个小的图片浏览器,要求可以显示jp...
    99+
    2023-07-05
  • QT实战之实现图片浏览系统
    目录引言实现功能效果实现图片浏览所用知识实现流程实现环境和UI设计具体实现引言 本系统支持,自动播放,左右拖动切换,点击列表切换,点击按钮切换;是一个标准的图像浏览软件。 Windo...
    99+
    2023-05-17
    QT实现图片浏览系统 QT图片浏览系统 QT图片浏览
  • 利用QT实现图片浏览器的示例详解
    目录1、概述2、代码示例3、演示图片1、概述 案例:制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来。  实现步骤: 1.创建...
    99+
    2023-02-23
    QT实现图片浏览器 QT图片浏览器 QT图片
  • 基于Qt实现离线瓦片地图下载器
    目录一、前言二、功能特点三、体验地址四、效果图五、相关代码一、前言 写这个离线地图下载器的初衷,就是为了方便自己的几个需要离线地图的程序,客户需求,既然地图程序已经可以支持离线地图,...
    99+
    2022-11-12
  • 基于Qt实现图片播放器的示例代码
    前言:使用qt制作了一个简单的图片播放器,可以播放gif、png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1、点击图片列表中图片进行播放。 2、自动播放...
    99+
    2022-12-16
    Qt实现图片播放器 Qt图片播放器 Qt图片播放
  • Android实现图片浏览器示例
    本文所述为一个基础的Android图片浏览器代码,是仿写Google原版实现的,代码中实现了主要的实现过程和方法,具体的完善还需要自己添加,代码中有很多注释,可帮助新手们快速理...
    99+
    2022-06-06
    浏览器 示例 图片 Android
  • Android简易图片浏览器的实现
    闲着没事,花了半个小时用这几天发布的部分内容来做一个Android简易图片浏览器小程序,代码设main_activity.xml设计首界面,设计三个按钮并赋予id,然后在MainAc...
    99+
    2022-11-13
  • UICollectionView实现图片浏览效果
    目录一、效果展示二、实现思路三、代码整理1、PhotoBrowseViewLayout2、PhotoBrowseCollectionViewCell3、CollectPhotoBro...
    99+
    2022-11-13
  • 如何实现MPBrowser简易图片浏览器
    这篇文章主要介绍“如何实现MPBrowser简易图片浏览器”,在日常操作中,相信很多人在如何实现MPBrowser简易图片浏览器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • 基于Python实现交互式文件浏览器
    目录引子应用场景源代码源代码说明效果如下所示引子 在许多应用程序中,需要方便地查看特定文件夹中的所有图片,例如图库管理器、相册应用程序、图片编辑器等。如果手动浏览文件夹并查看每个文件...
    99+
    2023-05-18
    Python实现交互式文件浏览器 Python实现文件浏览器 Python文件浏览器 Python文件浏览
  • Android编程实现的超炫图片浏览器
    本文实例讲述了Android编程实现的超炫图片浏览器。分享给大家供大家参考,具体如下: 使用过Android自带的gallery组件的人都知道,gallery实现的效果就是拖动...
    99+
    2022-06-06
    浏览器 图片 Android
  • Node怎么实现浏览器预览项目所有图片
    本文小编为大家详细介绍“Node怎么实现浏览器预览项目所有图片”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node怎么实现浏览器预览项目所有图片”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在前端实际项目开发...
    99+
    2023-07-04
  • iOS开发实现图片浏览功能
    本文实例为大家分享了iOS实现图片浏览功能的具体代码,供大家参考,具体内容如下 这是整体的效果图: 其中main.stroyboard中的控件有2个button,2个label,一...
    99+
    2022-11-13
  • Android实现网络图片浏览功能
    我们在上网的过程中经常看到各种图片,那你知道它是如何实现的吗?接下来就让我们一块探讨一下。 网络图片的浏览可以分为俩部分,基本的页面布局与界面交互,让我们一步步的来编写。 基本布局很简单,只需要有一个输入图片链接的EditText,一个浏览...
    99+
    2023-05-31
    android 图片浏览 roi
  • 基于JavaScript实现浏览器添加收藏功能
    目录js实现浏览器添加收藏功能扩展:javascript实现网站加入收藏功能第一种情况:可兼容所有浏览器的加入收藏代码,原理:第二种情况:js代码实现设为首页并加入收藏第三种情况:j...
    99+
    2023-02-17
    js浏览器添加收藏 js网站加入收藏
  • UIScrollView实现六棱柱图片浏览效果
    目录一、效果展示二、实现原理三、代码四、总结与思考一、效果展示 废话开篇:利用 CATransform3D 图形变换及 UIScrollView 的一些方法实现一个六棱柱图片浏览效果...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作