1,SVG格式文件打开
2,源码:
#include "svgwidget.h"
SvgWidget::SvgWidget(QWidget *parent) : QSvgWidget(parent)
{
//用于图片显示尺寸的确定
render = this->renderer();
}
//鼠标滚轮事件
void SvgWidget::wheelEvent(QWheelEvent *event)
{
const double diff = 0.1; //diff的值表示每次滚轮滚动一定的值,图片大小改变的比例
QSize size = render->defaultSize(); //改行代码及下面两行代码用于获取图片显示区的尺寸大小
int width = size.width();
int height = size.height();
if (event->delta() > 0) //获取滚轮滚动的距离值,通过此值来判断滚轮滚动的方向 大于0 滚轮向前 小于 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); //重新定义大小
}
#include "svgwindow.h"
SvgWindow::SvgWindow(QWidget *parent) : QScrollArea(parent)
{
svgWidget = new SvgWidget;
this->setWidget(svgWidget); //使svgWidget成为svgWindow的子窗体
}
//当主窗口对文件进行选择或修改时,将调用setFile函数设置新的文件
void SvgWindow::setFile(QString fileName)
{
svgWidget->load(fileName); //将新的SVG文件加载到svgWidget中进行显示
QSvgRenderer *render = svgWidget->renderer();
svgWidget->resize(render->defaultSize()); //使svgWidget窗体按SVG图片的默认尺寸进行显示
}
//鼠标按下事件
void SvgWindow::mousePressEvent(QMouseEvent *event)
{
mousePressPos = event->pos();
//hori可获得水平滑动条 vert可获得垂直滑动条
scrollBarValueOnMousePress.rx() = horizontalScrollBar()->value();
scrollBarValueOnMousePress.ry() = verticalScrollBar()->value();
event->accept();
}
//鼠标键按下并拖拽鼠标时触发鼠标移动事件
void SvgWindow::mouseMoveEvent(QMouseEvent *event)
{
//对水平滑动条的新位置进行设置
horizontalScrollBar()->setValue(scrollBarValueOnMousePress.x()-event->pos().x()+mousePressPos.x());
//对垂直滑动条的新位置进行设置
verticalScrollBar()->setValue(scrollBarValueOnMousePress.y()-event->pos().y() + mousePressPos.y());
horizontalScrollBar()->update();
verticalScrollBar()->update();
event->accept();
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QAction *openAct = new QAction(tr("打开"), this);
connect(openAct, SIGNAL(triggered(bool)), this, SLOT(slotOpenFile()));
ui->menuBar->addAction(openAct);
svgWindow = new SvgWindow;
setCentralWidget(svgWindow);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotOpenFile()
{
QString name = QFileDialog::getOpenFileName(this, tr("打开"), ":/", "svg files(*.svg)");
svgWindow->setFile(name);
}
3,效果: