日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt 运用鼠标绘制多边形

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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_H

graphicsview.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 运用鼠标绘制多边形的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。