From 8b053631aabef774165af9facb22c3053aa7cd72 Mon Sep 17 00:00:00 2001 From: mhf <1603291350@qq.com> Date: Fri, 2 Sep 2022 23:22:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=EF=BC=9A=E4=B8=BA=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=B7=BB=E5=8A=A0=E5=BF=85=E8=A6=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GraphicsItem/GraphicsItem.pro | 14 +++++++ GraphicsviewDemo/GraphicsItem/mainwindow.cpp | 4 +- .../GraphicsItem/qgraphicspointsitem.cpp | 41 ++++++++++++++++++- .../GraphicsItem/qgraphicspointsitem.h | 9 ++++ GraphicsviewDemo/GraphicsviewDemo.pro | 2 +- 5 files changed, 66 insertions(+), 4 deletions(-) diff --git a/GraphicsviewDemo/GraphicsItem/GraphicsItem.pro b/GraphicsviewDemo/GraphicsItem/GraphicsItem.pro index 92226a2..8e59d5a 100644 --- a/GraphicsviewDemo/GraphicsItem/GraphicsItem.pro +++ b/GraphicsviewDemo/GraphicsItem/GraphicsItem.pro @@ -1,3 +1,17 @@ +#--------------------------------------------------------------------------------------- +# @功能: QGraphicsItem基本图元演示 +# 1、包含内置的 直线、矩形、椭圆、多边形、简单文本、富文本、图片、绘图路径、窗口部件基本图元; +# 2、使用自定义散点图元; +# 3、实现所有图元鼠标选中、移动功能,包括窗口部件图元; +# 4、解决自定义图元鼠标移动存在残留问题。 +# @编译器: Desktop Qt 5.12.5 MSVC2017 64bit(也支持其它编译器) +# @Qt IDE: D:/Qt/Qt5.12.5/Tools/QtCreator/share/qtcreator +# +# @开发者 mhf +# @邮箱 1603291350@qq.com +# @时间 2022-09-02 23:17:22 +# @备注 +#--------------------------------------------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets diff --git a/GraphicsviewDemo/GraphicsItem/mainwindow.cpp b/GraphicsviewDemo/GraphicsItem/mainwindow.cpp index fafff84..80e7a0d 100644 --- a/GraphicsviewDemo/GraphicsItem/mainwindow.cpp +++ b/GraphicsviewDemo/GraphicsItem/mainwindow.cpp @@ -17,6 +17,8 @@ MainWindow::MainWindow(QWidget *parent) { ui->setupUi(this); + this->setWindowTitle("QGraphicsItem基本图元演示"); + initToolBar(); ui->graphicsView->setScene(&m_scene); // 添加绘图场景 @@ -38,7 +40,7 @@ void MainWindow::initToolBar() QPushButton* but3 = new QPushButton("椭圆"); QPushButton* but4 = new QPushButton("多边形"); QPushButton* but5 = new QPushButton("简单文本"); - QPushButton* but6 = new QPushButton("文本"); + QPushButton* but6 = new QPushButton("富文本"); QPushButton* but7 = new QPushButton("图片"); QPushButton* but8 = new QPushButton("路径"); QPushButton* but9 = new QPushButton("窗口"); diff --git a/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.cpp b/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.cpp index 974f3e6..1ab0c7a 100644 --- a/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.cpp +++ b/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.cpp @@ -14,25 +14,41 @@ QGraphicsPointsItem::~QGraphicsPointsItem() } +/** + * @brief 返回绘制的画笔对象 + * @return + */ QPen QGraphicsPointsItem::pen() const { return m_pen; } +/** + * @brief 设置画笔对象 + * @param pen + */ void QGraphicsPointsItem::setPen(const QPen &pen) { if (m_pen == pen) return; - prepareGeometryChange(); + prepareGeometryChange(); // 准备几何图形更改,以使QGraphicsScene的索引保持最新 m_pen = pen; update(); } +/** + * @brief 返回用于绘制的点数据 + * @return + */ QPolygonF QGraphicsPointsItem::points() const { return m_points; } +/** + * @brief 设置用于绘制的散点数据 + * @param points + */ void QGraphicsPointsItem::setPoints(const QPolygonF &points) { if (m_points == points) @@ -53,10 +69,25 @@ QRectF QGraphicsPointsItem::boundingRect() const return m_points.boundingRect().adjusted(-pad, -pad, pad, pad); } - +/** + * @brief 判断是否包含传入的点 + * @param point 传入数据点 + * @return 包含返回true,否则返回false + */ bool QGraphicsPointsItem::contains(const QPointF &point) const { +#if 1 // 用这种方法只有QPolygonF中有的点才返回true + for(auto pointf : m_points) + { + if(pointf == point) + { + return true; + } + } + return false; +#else // 用这种方法只要包含在当前图元边框矩形内的点都返回true return QGraphicsItem::contains(point); +#endif } /** @@ -90,6 +121,12 @@ static void qt_graphicsItem_highlightSelected( painter->drawRect(item->boundingRect().adjusted(pad, pad, -pad, -pad)); } +/** + * @brief 重写这个函数进行自定义图案绘制 + * @param painter 用于绘制的画家对象 + * @param option QStyleOptionsGraphicsItem类用于描述绘制QGraphicsItem所需的参数。 + * @param widget + */ void QGraphicsPointsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { Q_UNUSED(widget) diff --git a/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.h b/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.h index 17b7ac8..a8963a8 100644 --- a/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.h +++ b/GraphicsviewDemo/GraphicsItem/qgraphicspointsitem.h @@ -1,3 +1,12 @@ +/****************************************************************************** + * @文件名 qgraphicspointsitem.h + * @功能 自定义散点图元,解决了鼠标移动残留问题 + * + * @开发者 mhf + * @邮箱 1603291350@qq.com + * @时间 2022/09/02 + * @备注 + *****************************************************************************/ #ifndef QGRAPHICSPOINTSITEM_H #define QGRAPHICSPOINTSITEM_H diff --git a/GraphicsviewDemo/GraphicsviewDemo.pro b/GraphicsviewDemo/GraphicsviewDemo.pro index 9c99426..4121d03 100644 --- a/GraphicsviewDemo/GraphicsviewDemo.pro +++ b/GraphicsviewDemo/GraphicsviewDemo.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs -SUBDIRS += GraphicsItem # 图元项Demo +SUBDIRS += GraphicsItem # QGraphicsItem基本图元演示 -- GitLab