Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)
生活随笔
收集整理的這篇文章主要介紹了
Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
程序運(yùn)行截圖如下:
?
關(guān)鍵的函數(shù):
?
邏輯:通過滾輪事件,識別滾輪放大上移還是下移動,調(diào)用這個函數(shù)
源碼如下:
mygraphicsview.h
#ifndef MYGRAPHICSVIEW_H #define MYGRAPHICSVIEW_H#include <QObject> #include <QGraphicsView>QT_BEGIN_NAMESPACE class QWheelEvent; QT_END_NAMESPACEclass MyGraphicsView : public QGraphicsView {Q_OBJECT public:explicit MyGraphicsView(QWidget *parent = 0);~MyGraphicsView();protected:void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;void magnify();void shrink();void scaling(qreal scaleFactor);private:qreal m_scalingOffset; };#endif // MYGRAPHICSVIEW_Hwidget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE class QGraphicsScene; QT_END_NAMESPACEnamespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QGraphicsScene *m_scene; };#endif // WIDGET_Hmain.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }mygraphicsview.cpp
#include "mygraphicsview.h" #include <QWheelEvent> #include <QPoint> #include <QDebug>MyGraphicsView::MyGraphicsView(QWidget *parent): QGraphicsView(parent) {m_scalingOffset=1; }MyGraphicsView::~MyGraphicsView() {}void MyGraphicsView::magnify() {if(m_scalingOffset>1.3)return;m_scalingOffset+=0.1;scaling(m_scalingOffset); }void MyGraphicsView::shrink() {if(m_scalingOffset<0.9)return;m_scalingOffset-=0.1;scaling(m_scalingOffset); }void MyGraphicsView::scaling(qreal scaleFactor) {qDebug()<<this->sceneRect();scale(scaleFactor,scaleFactor); }void MyGraphicsView::wheelEvent(QWheelEvent *event) {QPoint sroll=event->angleDelta();sroll.y()>0?magnify():shrink();}widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QGraphicsRectItem>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);m_scene=new QGraphicsScene;QGraphicsRectItem *item=new QGraphicsRectItem;item->setPos(0,0);item->setBrush(QBrush(Qt::red));item->setRect(0,0,100,100);m_scene->addItem(item);ui->graphicsView->setSceneRect(-100,-100,100,100);ui->graphicsView->setScene(m_scene);}Widget::~Widget() {delete ui; }?
總結(jié)
以上是生活随笔為你收集整理的Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-使用QpropertyAn
- 下一篇: C++ opengl 启动光照