QT_SVG格式图片浏览器
来源:互联网 发布:简谱大师 mac 编辑:程序博客网 时间:2024/05/22 21:41
显示效果如图(放大超过窗口大小时, 可以通过滚动条拖曳查看图片)
1.
2. (如图,可以任意放大,而不失真)
源代码如下:
注: 1.在实现代码前 需要现在工程文件“.pro”中加入 QT += svg
2.新建项目“SVGTest”,基类选择“QMainWindow", 类名默认---实现主窗口区域
3.新建c++Class文件“SVGWindow”,基类输入“QScrollArea"(手工添加),类名为"SvgWindow"--实现一个带滚动条显示区域
4.新建c++Class文件 “SvgWidget”,基类输入“QSvgWidget”(手工添加), 类名为“SVGWidget”--实现具体的SVG图片显示工作
//svgwidget.h
1 /*** 2 * 实现显示SVG图片的函数所在的文件. 3 */ 4 #ifndef SVGWIDGET_H 5 #define SVGWIDGET_H 6 7 #include <QtSvg/QtSvg> 8 #include <QtSvg/QSvgWidget> 9 #include <QtSvg/QSvgRenderer>10 11 class SvgWidget : public QSvgWidget12 {13 Q_OBJECT14 public:15 SvgWidget(QWidget *parent = 0);16 //响应鼠标的滚动事件,使SVG图片能够通过鼠标滚轮的 滚动 进行 缩放17 void wheelEvent (QWheelEvent *);18 private:19 //渲染器20 QSvgRenderer *render; //用于图片显示尺寸 的 确定21 };22 23 #endif // SVGWIDGET_H
//svgwidget.cpp
1 #include "svgwidget.h" 2 3 SvgWidget::SvgWidget(QWidget *parent) 4 : QSvgWidget(parent) 5 { 6 //获得本窗体的QSvgRenderer对象 7 render = renderer (); 8 } 9 10 //滚轮响应事件,使SVG图片能够鼠标滚动滑轮进行缩放11 void SvgWidget::wheelEvent (QWheelEvent *e)12 {13 //diff的值表示每次滚轮滑动一定的值,图片大小改变的比例14 const double diff = 0.1;15 /***16 * 下面三行代码: 用于获取图片显示区的尺寸大小,以便进行下一步的缩放操作17 */18 QSize size = render->defaultSize ();19 int width = size.width ();20 int height = size.height ();21 /***22 * 利用QWheelEvent的delta()函数获得滚轮的距离值,通过此值来判断滚轮滚动的方向23 * delta() > 0 , 则表示滚轮向前(远离用户方向); delta() < 0, 则表示向后滚动24 * (Ps: 鼠标滚动事件,滚轮每滚动1°, 相当于移动8°;而常见的滚轮鼠标拨动一下滚动角度为15°25 * 因此,滚轮拨动一下相当于移动了 120(=15*8)26 */27 if (e->delta () > 0)28 {29 //对图片的长, 宽值进行处理, 放大一定的比例30 width = int(this->width () + this->width ()*diff);31 height = int(this->height () + this->height ()*diff);32 }33 else34 {35 //对图片的长,宽进行处理,缩小一定的比例36 width = int(this->width () - this->width ()*diff);37 height = int(this->height () - this->height ()*diff);38 }39 //利用新的长,宽值对图片进行resize()操作40 resize (width, height);41 42 }
//svgwindow.h
1 /* 2 * 实现一个带滚动条显示区域的函数所在的文件. 3 * 使图片在放大到超过主窗口大小时, 能通过拖曳 4 */ 5 #ifndef SVGWINDOW_H 6 #define SVGWINDOW_H 7 8 #include <QScrollArea> 9 #include "svgwidget.h"10 11 class SvgWindow : public QScrollArea12 {13 Q_OBJECT14 public:15 SvgWindow(QWidget *parent = 0);16 void setFile(QString);17 void mousePressEvent (QMouseEvent *);18 void mouseMoveEvent (QMouseEvent *);19 private:20 SvgWidget *svgWidget;21 QPoint mousePressPos;22 QPoint scrollBarValueOnMousePress;23 };24 25 #endif // SVGWINDOW_H
//svgwindow.cpp
1 #include "svgwindow.h" 2 3 SvgWindow::SvgWindow(QWidget *parent) 4 : QScrollArea(parent) 5 { 6 svgWidget = new SvgWidget; 7 setWidget (svgWidget); //设置滚动条 8 } 9 10 //当主窗口对文件进行了选择或修改时, 将调用setFile()函数设置新的文件11 void SvgWindow::setFile (QString fileName)12 {13 //将新的SVG文件加载到svgWidget中显示14 svgWidget->load (fileName);15 //返回渲染器,去显示控件的内容16 QSvgRenderer *render = svgWidget->renderer ();17 //使svgWidget窗体按SVG图片的默认尺寸进行显示18 svgWidget->resize (render->defaultSize ());19 20 }21 22 /***23 * 鼠标键按下时,mousePressPos和scrollBarValuesOnMousePress进行初始化,QScrollArea的horizonalScrollBar()24 * 和verticalScrollBar()函数可以分别获得svgWindow的水平滚动条和垂直滚动条25 */26 void SvgWindow::mousePressEvent (QMouseEvent *event)27 {28 mousePressPos = event->pos (); //记下当前事件位置29 scrollBarValueOnMousePress.rx () = horizontalScrollBar ()->value ();30 scrollBarValueOnMousePress.ry () = verticalScrollBar ()->value ();31 //设置事件对象的接受信号,表明事件接受器希望事件,意外事件传到父部件32 event->accept ();33 }34 35 /***36 * 当鼠标按下并拖曳鼠标时, 触发mouseMoveEvent()函数,通过滑动条的位置设置实现图片图片拖曳的效果37 */38 void SvgWindow::mouseMoveEvent (QMouseEvent *event)39 {40 //对水平滑动条的新位置进行设置41 //新水平滑动条位置 = (滑块当前位置 - 鼠标即时返回的位置)(即:滑块移动位置) + 鼠标之前记下的事件位置42 horizontalScrollBar ()->setValue (scrollBarValueOnMousePress.x () - event->pos ().x () + mousePressPos.x ());43 //对垂直滑动条的新位置进行设置44 verticalScrollBar ()->setValue (scrollBarValueOnMousePress.y () - event->pos ().y () + mousePressPos.y ());45 horizontalScrollBar ()->update ();46 verticalScrollBar ()->update ();47 event->accept ();48 }
//mainwindow.h
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include "svgwindow.h" 6 7 class MainWindow : public QMainWindow 8 { 9 Q_OBJECT10 11 public:12 MainWindow(QWidget *parent = 0);13 ~MainWindow();14 void createMenu();15 public slots:16 void slotOpenFile();17 private:18 SvgWindow *svgWindow; //用于调用相关函数传递选择的文件名19 };20 21 #endif // MAINWINDOW_H
//mainwindow.cpp
1 #include "mainwindow.h" 2 3 MainWindow::MainWindow(QWidget *parent) 4 : QMainWindow(parent) 5 { 6 setWindowTitle (tr("SVG Viewer")); 7 createMenu (); 8 svgWindow = new SvgWindow; 9 setCentralWidget (svgWindow);10 }11 12 //创建菜单栏13 void MainWindow::createMenu ()14 {15 //添加“文件”菜单条16 QMenu *fileMenu = menuBar ()->addMenu (tr("文件"));17 QAction *openAct = new QAction(tr("打开"), this);18 connect (openAct, SIGNAL(triggered(bool)), this, SLOT(slotOpenFile()));19 //添加"打开"菜单项20 fileMenu->addAction(openAct);21 }22 23 //通过标准文件对话框选择SVG文件, 并调用SvgWindow的setFile()函数将选择的文件名传递给svgWindow进行显示24 void MainWindow::slotOpenFile ()25 {26 QString name = QFileDialog::getOpenFileName (this, "打开", "/", "svg file(*.svg)");27 svgWindow->setFile (name);28 }29 30 MainWindow::~MainWindow()31 {32 33 }
//main.cpp
1 #include "mainwindow.h" 2 #include <QApplication> 3 4 int main(int argc, char *argv[]) 5 { 6 QApplication a(argc, argv); 7 MainWindow w; 8 w.show(); 9 10 return a.exec();11 }
阅读全文
0 0
- QT_SVG格式图片浏览器
- js 下载Base64格式数据图片(兼容主流浏览器)
- 织梦后台jpeg格式图片没法上传,图片浏览器中没法查看预览
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 图片浏览器
- 以缩略图的形式在Windows资源浏览器中显示自定义格式图片
- IE浏览器中对图片点击“右键另存为”只能是bmp格式的解决
- 小巧工具--图片浏览器
- 用浏览器浏览图片
- VB制作图片浏览器
- 数据并发性和一致性介绍--Data Concurrency and Consistency
- Matlab安装时遇到software caused connection abort recv failed 问题
- PAT
- JS小知识
- 关系型数据库工作原理-客户端连接管理器(翻译自Coding-Geek文章)
- QT_SVG格式图片浏览器
- ECharts(中国地图篇)的使用
- POJ
- 1008. 数组元素循环右移问题 (20)
- maven使用国内镜像(解决maven原镜像下载慢)
- python raw字符串抑制转义
- centos 7 系统下进行多服务器的SSH免密码登录配置
- Sorting It All Out poj 1094(判断严格小于关系&判断是否有环)
- Swift UIBezierPath圆角