Qt 运用鼠标绘制多边形
生活随笔
收集整理的這篇文章主要介紹了
Qt 运用鼠标绘制多边形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- Qt 鼠標繪制多邊形
- 技術要點:
- 實現過程:
Qt 鼠標繪制多邊形
分析: Qt鼠標繪圖,就是要捕獲鼠標事件,將捕獲到的坐標點傳遞給場景,然后場景中就可以添加響應的2D圖形了。
技術要點:
1、了解Qt的視圖框架2、子類化QGraphicsView,實現鼠標事件的捕獲3、運用addPolygon()函數添加多邊形實現過程:
1、創建工程,改寫MainWindows 函數如下 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);setWindowTitle("draw polygon demo");//在中央區域布設視圖QGraphicsView *view = new QGraphicsView(this);setCentralWidget(view);view->show();//創建場景QGraphicsScene *scene = new QGraphicsScene(this);view->setScene(scene);QPolygonF m_MousePressPos;m_MousePressPos<<QPointF(0,0)<<QPointF(0,100)<<QPointF(100,100)<<QPointF(100,0);scene->addPolygon(m_MousePressPos);}
視圖中已經有了一個矩形。接著我們運用視圖的鼠標事件捕獲需要繪制的多邊形的交點坐標。
2、接著我們子類化QGraphicsView, 重寫MousePressEvent(),用于記錄鼠標左鍵按下時的坐標,右鍵釋放繪圖
具體如下 graphicsview.h :
#ifndef GRAPHICSVIEW_H #define GRAPHICSVIEW_H#include <QObject> #include <QWidget>#include <QGraphicsView> #include <QMouseEvent>class GraphicsView : public QGraphicsView {Q_OBJECT public:explicit GraphicsView(QWidget *parent = 0);QPolygonF m_MousePressPos; //多邊形的交點signals:void sigDrawPolygon(); //發送繪制多邊形信號 protected:virtual void mousePressEvent(QMouseEvent *event); };#endif // GRAPHICSVIEW_Hgraphicsview.cpp:
#include "graphicsview.h"GraphicsView::GraphicsView(QWidget *parent) : QGraphicsView(parent){setMouseTracking(true);setRenderHint(QPainter::Antialiasing);//設置緩存背景模式setCacheMode(CacheBackground); }void GraphicsView:: mousePressEvent(QMouseEvent *event) {qDebug("************GraphicsView::mousePressEvent*****************");//鼠標的按鈕按下時,左右鍵都可以if (event->button() == Qt::LeftButton) {QPointF point = mapToScene(event->pos());m_MousePressPos<<point;emit sigDrawPolygon(); //發送繪制多邊形}if (event->button() == Qt::RightButton ){m_MousePressPos.clear();}QGraphicsView::mousePressEvent(event); }3、改寫MainWindown
在MainWindown.h 中添加私有變量:
QGraphicsScene *scene;GraphicsView *view;然后添加一個槽函數:
void DrawPolygonSlot( );
在MainWindow.cpp 中:
實現槽函數:
void MainWindow::DrawPolygonSlot( ) {qDebug()<<"add PolygonItem ";QGraphicsPolygonItem *Polygon = scene->addPolygon(view->m_MousePressPos);// scene->addEllipse(view->m_MousePressPos.last().x()-5,view->m_MousePressPos.last().y()-5,10,10); }在MainWindows的構造函數中添加信號槽關聯:
QObject::connect(view,SIGNAL(sigDrawPolygon()),this,SLOT(DrawPolygonSlot()));同時改寫創建場景和視圖部分:
//在中央區域布設視圖view = new GraphicsView(this);setCentralWidget(view);view->show();//創建場景scene = new QGraphicsScene(this);view->setScene(scene);ok!編譯測試:
總結:
我們還可以在此基礎上擴展:
1、如繪制時填充顏色,修改畫筆顏色等等
2、增加圖形的平移、旋轉等等。
總結
以上是生活随笔為你收集整理的Qt 运用鼠标绘制多边形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QGraphicsScene 的简单理解
- 下一篇: Qt 2D绘图功能简单总结