第6章:SVG

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,效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ksmtnsv37297/article/details/86536847