mainwindow
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "svgwindow.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void createMenu();
public slots:
void slotOpenFile();
private:
SvgWindow* svgWindow;
};
#endif
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("SVG Viewer"));
createMenu();
svgWindow = new SvgWindow;
setCentralWidget(svgWindow);
setMinimumSize(600,400);
}
MainWindow::~MainWindow() {}
void MainWindow::createMenu()
{
QMenu* fileMenu = menuBar()->addMenu(tr("文件"));
QAction *openAct =new QAction(tr("打开"),this);
fileMenu->addAction(openAct);
connect(openAct,&QAction::triggered,this,&MainWindow::slotOpenFile);
}
void MainWindow::slotOpenFile()
{
QString name = QFileDialog::getOpenFileName(this,QObject::tr("打开"),"/","svg files(*.svg)");
svgWindow->setFile(name);
}
svgwindow
svgwindow.h
#ifndef SVGWINDOW_H
#define SVGWINDOW_H
#include <QScrollArea>
#include "svgwidget.h"
class SvgWindow : public QScrollArea
{
Q_OBJECT
public:
SvgWindow(QWidget* parent = 0);
void setFile(QString);
void mousePressEvent(QMouseEvent*);
void mouseMoveEvent(QMouseEvent*);
private:
SvgWidget* svgWidget;
QPoint mousePressPos;
QPoint scrollBarValuesOnMousePress;
};
#endif
svgwindow.cpp
#include "svgwindow.h"
SvgWindow::SvgWindow(QWidget *parent):QScrollArea(parent)
{
svgWidget = new SvgWidget;
setWidget(svgWidget);
}
void SvgWindow::setFile(QString fileName)
{
svgWidget->load(fileName);
QSvgRenderer * render = svgWidget->renderer();
svgWidget->resize(render->defaultSize());
}
void SvgWindow::mousePressEvent(QMouseEvent *event)
{
mousePressPos = event->pos();
scrollBarValuesOnMousePress.rx() = horizontalScrollBar()->value();
scrollBarValuesOnMousePress.ry() = verticalScrollBar()->value();
event->accept();
}
void SvgWindow::mouseMoveEvent(QMouseEvent *event)
{
horizontalScrollBar()->setValue(scrollBarValuesOnMousePress.x() - event->pos().x() + mousePressPos.x());
verticalScrollBar()->setValue(scrollBarValuesOnMousePress.y()- event->pos().y() + mousePressPos.y());
horizontalScrollBar()->update();
verticalScrollBar()->update();
event->accept();
}
svgwidget
svgwidget.h
#ifndef SVGWIDGET_H
#define SVGWIDGET_H
#include <QtSvg>
#include <QSvgWidget>
#include <QSvgRenderer>
class SvgWidget : public QSvgWidget
{
Q_OBJECT
public:
SvgWidget(QWidget* parent = 0);
void wheelEvent(QWheelEvent*);
private:
QSvgRenderer* render;
};
#endif
svgwidget.cpp
#include "svgwidget.h"
SvgWidget::SvgWidget(QWidget *parent):QSvgWidget(parent)
{
render = renderer();
}
void SvgWidget::wheelEvent(QWheelEvent *e)
{
const double diff = 0.1;
int width ;
int height;
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);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
运行图