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 运用鼠标绘制多边形相关推荐
- Qt QPainter鼠标绘制线条、矩形、多边形
Qt通过鼠标绘制线条.矩形.多边形本质都是根据鼠标的坐标位移,使用QPainter的自带的函数进行绘制.具体代码如下: graphicspainter.h #ifndef GRAPHICSPAINTE ...
- 百度地图实现鼠标绘制多边形并获取所有点坐标
百度地图开放平台http://lbsyun.baidu.com/ 这里使用的是Javascript API http://lbsyun.baidu.com/index.php?title=jspopu ...
- c# 通过鼠标点击绘制多边形
1.问题描述 c#中,希望用鼠标点击事件,实现多边形的绘制: 2.解决思路 a.创建一个链表,将鼠标左键选中的点存储到链表中: b.根据链表中的值,利用c#的DrawPolygon()函数绘制: 3. ...
- JS实现鼠标点击爱心绘制多边形每日一言功能
本篇文章主要介绍我的个人博客 程序猿刘川枫 中页面使用的美化功能(基于JS实现): 1.鼠标点击出现不同颜色爱心特效 2.页面浮动多边形跟随鼠标移动 3.每日一言功能 1.鼠标点击出现爱心特效 经常在 ...
- vue 项目使用 openlayers根据半径绘制圆形、绘制多边形
vue 项目使用 openlayers根据半径绘制圆形.绘制多边形 这个地方我就简单点写吧,因为一些东西比较乱,有的包啥的就按照官网API开发文档根据报错提示自己添加就可以了,我这个地方就不重复写了. ...
- QT绘制多边形-----五边形
*QT绘制多边形 今天学习qt绘制多边形的绘制 1.先创建一个新项目Application->Qt Widgets Application 2.在头文件.h添加: protected: //在保 ...
- 【Unity Shader学习笔记】(五)使用鼠标绘制自由多边形(附完整工程源码)
前言 在前面的文章中,我们已经了解了怎样使用Unity Shader来绘制简单的点和线,本文将延续上次的话题,讲述一下如何在场景中使用Unity Shader绘制自由多边形. 本文所述的程序,支持在地 ...
- qt中实现绘制图形与截图
引言 实现可以选择线型,线宽,颜色,是否填充图形来绘制各种常见的图形,同时可以选择矩形区域来实现截图. 效果 绘图的效果如上,截图的效果: 实现 项目使用的qt5.13.2,编译器为MSVC2017_ ...
- scratch绘制多边形_如何使用Scratch 3绘制矢量图形
scratch绘制多边形 Scratch是一种流行的视觉编程语言,用于创建视频游戏和动画. 它还具有矢量绘图工具,任何人都可以使用它来创建独特的游戏资产和艺术品. Scratch 1.0用Smallt ...
最新文章
- linux安装.net core3.0,树莓派4安装net core3.0环境
- struts标签传值
- C++继承中的访问级别
- linux常用命令 运算命令
- 通过反射越过泛型检查
- 有功功率 无功功率 功率因数
- 利用python进行数据分析——第11章时间序列
- C#综合揭秘——细说多线程(下)(转载)
- 单片机怎么通过按键控制计时器的开始和停止_《搞机作战室》机械师PX780控制中心软件使用教程...
- 腾讯程序员不寻常的三年
- 记录关于微信开放平台扫码登录的问题
- 在繁杂的网页中揪出email地址
- React中关于props的那些事
- CCF关于NOIP2018获奖证书发放的公告
- 离散数学对学计算机有什么用?
- 运行JavaWeb项目报错Access denied for user ‘root‘@‘localhost‘ (using password: YES)
- 易语言子程序和C语言子程序,一步一步跟我学易语言之认识窗口组件和子程序...
- WEB 应用中的整体结构和层次关系
- 如何在2020年任意设备上刷入Nethunter
- 两款很棒的工具箱App