qt QGraphicsView框架 实现鼠标绘图
时间: 2024-01-19 07:05:17 浏览: 56
在Qt中,可以使用QGraphicsView框架来实现鼠标绘图。以下是一个简单的示例,演示如何使用QGraphicsView框架来实现鼠标绘图:
1. 创建一个Qt Widgets应用程序,并将主窗口设置为QMainWindow。
2. 在主窗口中添加一个QGraphicsView部件,并设置其大小和位置。
3. 在主窗口中添加一个QGraphicsScene对象,并将其设置为QGraphicsView部件的场景。
4. 在主窗口中添加一个自定义的GraphicsItem对象,并将其添加到QGraphicsScene中。
5. 在自定义的GraphicsItem对象中,重写mousePressEvent和mouseMoveEvent事件处理程序,以捕获鼠标事件,并在场景中绘制图形。
以下是示例代码:
mainwindow.h文件:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QGraphicsScene>
#include "customgraphicsitem.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
CustomGraphicsItem *item;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp文件:
```
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsView>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建场景和视图
scene = new QGraphicsScene(this);
QGraphicsView *view = new QGraphicsView(scene, this);
view->setGeometry(10, 10, 400, 400);
// 创建自定义的GraphicsItem对象并添加到场景中
item = new CustomGraphicsItem();
scene->addItem(item);
}
MainWindow::~MainWindow()
{
delete ui;
}
```
customgraphicsitem.h文件:
```
#ifndef CUSTOMGRAPHICSITEM_H
#define CUSTOMGRAPHICSITEM_H
#include <QGraphicsItem>
class CustomGraphicsItem : public QGraphicsItem
{
public:
CustomGraphicsItem();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event);
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
private:
QList<QPointF> points;
};
#endif // CUSTOMGRAPHICSITEM_H
```
customgraphicsitem.cpp文件:
```
#include "customgraphicsitem.h"
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
CustomGraphicsItem::CustomGraphicsItem()
{
// 设置图形项的矩形大小
setRect(0, 0, 100, 100);
}
QRectF CustomGraphicsItem::boundingRect() const
{
return rect();
}
void CustomGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
// 绘制多边形
QPolygonF polygon(points);
painter->drawPolygon(polygon);
}
void CustomGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// 添加一个新点
QPointF point = event->pos();
points.append(point);
// 重新绘制
update();
}
void CustomGraphicsItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
// 添加一个新点
QPointF point = event->pos();
points.append(point);
// 重新绘制
update();
}
```
运行应用程序后,单击并拖动鼠标,即可在场景中绘制多边形。每次单击鼠标时,都会在多边形中添加一个新点。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)