Qt中视图的缩放对应缩略图中矩形框的缩放
生活随笔
收集整理的這篇文章主要介紹了
Qt中视图的缩放对应缩略图中矩形框的缩放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本文實現的目的是:視圖縮放時,縮略圖中的矩形框也進行縮放,而縮略圖中的矩形區域為視圖中的可見區。
獲取視圖中滾動條的值,將其值與縮略圖所在的小窗口對比,可通過繪圖求其比例,再按比例縮小。
首先提供主要的代碼:
下面貼出自定義場景類
MyGraphicsScene.h
MyGraphicsScene.cpp
#include "MyGraphicsScene.h" #include <QGraphicsSceneMouseEvent> #include <QGraphicsRectItem> #include <QDebug>MyGraphicsScene::MyGraphicsScene(QObject *parent): QGraphicsScene(parent), m_bRectClicked(false) {m_pRectItem = new QGraphicsRectItem(0, 0, 0, 0);QPen penRectItem = QPen(QColor(255, 0, 0));penRectItem.setWidth(2);m_pRectItem->setPen(penRectItem);m_pRectItem->setZValue(1);addItem(m_pRectItem); }void MyGraphicsScene::onSetPreviewRect(QRect rect) {m_rectSaved = rect;// 內縮幾個像素,用矩形外邊框來標示viewport顯示區域m_pRectItem->setRect(rect.x() - 2/*+ 5*/, rect.y() - 2/*+ 5*/, rect.width() - 4, rect.height() - 4); }void MyGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) {QGraphicsScene::mouseMoveEvent(mouseEvent);if (m_bRectClicked) {QPoint ptTopLeft = mouseEvent->scenePos().toPoint() - m_ptRectRelated;m_rectSaved.setTopLeft(ptTopLeft); // qDebug()<<"mouseMoveEvent";emit previewRectMoved(m_rectSaved);} }void MyGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {QGraphicsScene::mousePressEvent(mouseEvent);if (m_rectSaved.contains(mouseEvent->scenePos().x(), mouseEvent->scenePos().y())) {m_bRectClicked = true;m_ptRectRelated = mouseEvent->scenePos().toPoint() - m_rectSaved.topLeft();} }void MyGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) {QGraphicsScene::mouseReleaseEvent(mouseEvent);m_bRectClicked = false; }總結
以上是生活随笔為你收集整理的Qt中视图的缩放对应缩略图中矩形框的缩放的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中常用字符串相关的编程题
- 下一篇: java+多线程菜鸟_java多线程