qt使用qgraphicsview创建一个简单画板
时间: 2024-01-24 14:03:44 浏览: 135
qt之简易画板
以下是使用Qt的QGraphicsView创建一个简单画板的示例代码:
mainwindow.h:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class QGraphicsScene;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_actionClear_triggered();
private:
Ui::MainWindow *ui;
QGraphicsScene *scene;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsEllipseItem>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建场景和视图
scene = new QGraphicsScene(this);
QGraphicsView *view = new QGraphicsView(scene);
setCentralWidget(view);
setWindowTitle(tr("Simple Paint"));
// 设置视图大小
view->setFixedSize(400, 400);
// 设置画笔颜色和宽度
QPen pen;
pen.setColor(Qt::black);
pen.setWidth(3);
// 监听视图的鼠标事件
view->viewport()->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionClear_triggered()
{
// 清空场景中的所有图形项
scene->clear();
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if (watched == ui->graphicsView->viewport() && event->type() == QEvent::MouseButtonPress) {
// 获取鼠标点击的位置
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
QPointF pos = ui->graphicsView->mapToScene(mouseEvent->pos());
// 创建一个椭圆图形项并添加到场景中
QGraphicsEllipseItem *ellipse = new QGraphicsEllipseItem(pos.x() - 10, pos.y() - 10, 20, 20);
ellipse->setPen(pen);
scene->addItem(ellipse);
return true;
}
return QMainWindow::eventFilter(watched, event);
}
```
在这个示例代码中,我们创建了一个QGraphicsScene和一个QGraphicsView,用于显示绘制的图形。然后,我们设置视图的大小并监听视图的鼠标事件。当用户在视图中点击鼠标时,我们获取鼠标点击的位置,创建一个椭圆图形项并添加到场景中。最后,我们设置画笔颜色和宽度,并在清空场景时删除所有图形项。
注意:在这个示例代码中,我们使用了事件过滤器来监听视图的鼠标事件。如果你对事件过滤器不熟悉,可以先了解一下Qt中的事件系统。
阅读全文