文章目录

  • 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 运用鼠标绘制多边形相关推荐

  1. Qt QPainter鼠标绘制线条、矩形、多边形

    Qt通过鼠标绘制线条.矩形.多边形本质都是根据鼠标的坐标位移,使用QPainter的自带的函数进行绘制.具体代码如下: graphicspainter.h #ifndef GRAPHICSPAINTE ...

  2. 百度地图实现鼠标绘制多边形并获取所有点坐标

    百度地图开放平台http://lbsyun.baidu.com/ 这里使用的是Javascript API http://lbsyun.baidu.com/index.php?title=jspopu ...

  3. c# 通过鼠标点击绘制多边形

    1.问题描述 c#中,希望用鼠标点击事件,实现多边形的绘制: 2.解决思路 a.创建一个链表,将鼠标左键选中的点存储到链表中: b.根据链表中的值,利用c#的DrawPolygon()函数绘制: 3. ...

  4. JS实现鼠标点击爱心绘制多边形每日一言功能

    本篇文章主要介绍我的个人博客 程序猿刘川枫 中页面使用的美化功能(基于JS实现): 1.鼠标点击出现不同颜色爱心特效 2.页面浮动多边形跟随鼠标移动 3.每日一言功能 1.鼠标点击出现爱心特效 经常在 ...

  5. vue 项目使用 openlayers根据半径绘制圆形、绘制多边形

    vue 项目使用 openlayers根据半径绘制圆形.绘制多边形 这个地方我就简单点写吧,因为一些东西比较乱,有的包啥的就按照官网API开发文档根据报错提示自己添加就可以了,我这个地方就不重复写了. ...

  6. QT绘制多边形-----五边形

    *QT绘制多边形 今天学习qt绘制多边形的绘制 1.先创建一个新项目Application->Qt Widgets Application 2.在头文件.h添加: protected: //在保 ...

  7. 【Unity Shader学习笔记】(五)使用鼠标绘制自由多边形(附完整工程源码)

    前言 在前面的文章中,我们已经了解了怎样使用Unity Shader来绘制简单的点和线,本文将延续上次的话题,讲述一下如何在场景中使用Unity Shader绘制自由多边形. 本文所述的程序,支持在地 ...

  8. qt中实现绘制图形与截图

    引言 实现可以选择线型,线宽,颜色,是否填充图形来绘制各种常见的图形,同时可以选择矩形区域来实现截图. 效果 绘图的效果如上,截图的效果: 实现 项目使用的qt5.13.2,编译器为MSVC2017_ ...

  9. scratch绘制多边形_如何使用Scratch 3绘制矢量图形

    scratch绘制多边形 Scratch是一种流行的视觉编程语言,用于创建视频游戏和动画. 它还具有矢量绘图工具,任何人都可以使用它来创建独特的游戏资产和艺术品. Scratch 1.0用Smallt ...

最新文章

  1. linux安装.net core3.0,树莓派4安装net core3.0环境
  2. struts标签传值
  3. C++继承中的访问级别
  4. linux常用命令 运算命令
  5. 通过反射越过泛型检查
  6. 有功功率 无功功率 功率因数
  7. 利用python进行数据分析——第11章时间序列
  8. C#综合揭秘——细说多线程(下)(转载)
  9. 单片机怎么通过按键控制计时器的开始和停止_《搞机作战室》机械师PX780控制中心软件使用教程...
  10. 腾讯程序员不寻常的三年
  11. 记录关于微信开放平台扫码登录的问题
  12. 在繁杂的网页中揪出email地址
  13. React中关于props的那些事
  14. CCF关于NOIP2018获奖证书发放的公告
  15. 离散数学对学计算机有什么用?
  16. 运行JavaWeb项目报错Access denied for user ‘root‘@‘localhost‘ (using password: YES)
  17. 易语言子程序和C语言子程序,一步一步跟我学易语言之认识窗口组件和子程序...
  18. WEB 应用中的整体结构和层次关系
  19. 如何在2020年任意设备上刷入Nethunter
  20. 两款很棒的工具箱App

热门文章

  1. IDE (Integrated Development Environment) 集成开发环境
  2. 直方图中最大的矩形(遍历与单调栈)
  3. linux环境下安装软件 快速,不超时
  4. [云炬创业基础笔记]第二章创业者测试21
  5. 科大星云诗社动态20210905
  6. 科大星云诗社动态20210908
  7. GitHub如何下载单个文件夹
  8. VTK修炼之道31:图像二值化_阈值法
  9. Android常用的开源框架
  10. 有关软件开发中的一些想法