原理就是通过mousemove获取鼠标实时位置,存储到列表中,调用paintevent进行绘制即可。
看代码:
.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPainter>
#include <QMenu>struct myPoint
{QPoint point;QPoint movePoint;int m_r;int m_g;int m_b;
};class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void CreateMenu();protected:void paintEvent(QPaintEvent *event);void mousePressEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);public slots:void onDeleteClicked();void onColorClicked();private:bool m_bCliked=false;QPoint m_Point;QPoint m_movePoint;QMenu *m_pMenu=nullptr;QFont m_Font;QList<myPoint> pointList;int m_R=255;int m_G=0;int m_B=0;};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include <QMouseEvent>
#include <qdebug.h>
#include <QTimer>
#include <QTime>
#include <QMenu>
#include <QAction>
#include <QColorDialog>Widget::Widget(QWidget *parent): QWidget(parent)
{this->resize(800,600);CreateMenu();m_Font.setPointSize(5);m_Font.setFamily("Microsoft YaHei");
}Widget::~Widget()
{}void Widget::CreateMenu()
{m_pMenu=new QMenu(this);QAction *clearAction=new QAction(tr("Clear"),this);QAction *colorAction=new QAction(tr("Color"),this);m_pMenu->addAction(colorAction);m_pMenu->addSeparator();m_pMenu->addAction(clearAction);connect(clearAction,&QAction::triggered,this,&Widget::onDeleteClicked);connect(colorAction,&QAction::triggered,this,&Widget::onColorClicked);
}void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setFont(m_Font);for(int i=0;i<pointList.size();i++){myPoint mypoint=pointList[i];QPen pen(QBrush(QColor(mypoint.m_r,mypoint.m_g,mypoint.m_b)),5);painter.setPen(pen);painter.drawLine(mypoint.point.x(),mypoint.point.y(),mypoint.movePoint.x(),mypoint.movePoint.y());}
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->buttons()==Qt::LeftButton){m_bCliked=true;m_Point=event->pos();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons()==Qt::LeftButton&&m_bCliked){m_movePoint=event->pos();m_Point=event->pos();myPoint mypoint;mypoint.point=m_Point;mypoint.movePoint=m_movePoint;mypoint.m_r=m_R;mypoint.m_g=m_G;mypoint.m_b=m_B;pointList.append(mypoint);}update();
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{m_bCliked=false;if(event->button()==Qt::RightButton){m_pMenu->move(mapToGlobal(event->pos()));m_pMenu->show();}}void Widget::onDeleteClicked()
{pointList.clear();update();
}void Widget::onColorClicked()
{QColor color = QColorDialog::getColor(QColor(255,0,0));m_R=color.red();m_G=color.green();m_B=color.blue();
}

效果图:

都1202年,你还相信光吗?欢迎评论区告诉我。
ヾ( ̄▽ ̄)ByeBye

qt实现简易的画图,鼠标事件相关推荐

  1. Qt给控件添加鼠标事件

    处理控件上的鼠标事件,是做界面人机交互经常需要的,本文做一个使用的总结.本文在QLable控件中实验过. 一.在h文件中声明鼠标响应事件处理函数 public:explicit MainWindow( ...

  2. QT mouseMoveEvent事件(qmainwindow内追踪鼠标事件事件)

    最近用Qt软件界面,需要用到mouseMoveEvent,研究了下,发现些问题,分享一下. 在Qt中要捕捉鼠标移动事件需要重写MouseMoveEvent,但是MouseMoveEvent为了不太耗资 ...

  3. qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介

    一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...

  4. 2、Qt Project之鼠标事件监控

    鼠标事件监控: 对于鼠标时间监控的相关操作,我们在简历工程的时候需要选择的是QWidget基类,不选择QMainWindow基类,如下所示: Base class:QWidget Step1:我们首先 ...

  5. 【Qt教程】3.1 - Qt5 event事件、Label控件的鼠标事件捕获

    1. event简介 事件(event)是由系统或者Qt本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键 ...

  6. Qt安装事件过滤器、过滤子控件事件、截获控件按键、鼠标事件

    Qt安装事件过滤器.过滤子控件事件.截获控件按键.鼠标事件 Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理. 假设我们有一个C ...

  7. QT之鼠标事件的全局捕获

    Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理. 上示的图片黑色键盘是一个独立的Widget的子类CKeyboardForm, ...

  8. QT 事件系统之QMouseEvent鼠标事件

    概述 在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件. 在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件. ...

  9. VS+QT鼠标事件的一些补充

    一:基础知识 1. 鼠标事件分为四种对应不同的函数(该四个函数均继承于QWidget): (1) 按下Press -> void mouseDoubleClickEvent ( QMouseEv ...

  10. QT界面:重写鼠标事件/实时显示Label中鼠标位置

    为了在QT UI界面的状态栏实时显示鼠标在Label中的位置,需要重写鼠标事件MouseMoveEvent(). 但是MouseMoveEvent为了不过多消耗资源,默认需要鼠标按下捕捉到.因此需要在 ...

最新文章

  1. 以下选项不是python打开方式的是-关于文件的打开方式,以下选项中描述正确的是...
  2. fcode-页面九宫格自动锁屏jquery插件
  3. 修订版 | 目标检测:速度和准确性比较(Faster R-CNN,R-FCN,SSD,FPN,RetinaNet和YOLOv3)...
  4. AngelToken揭秘区块链之四大链
  5. html转word 图片丢失 java_Java 实现 Word 转 pdf 文档的工具来了
  6. 【SSO单点系列】(6):CAS4.0 单点流程序列图(中文版)以及相关术语解释(TGT、ST、PGT、PT、PGTIOU)...
  7. 求0到数字n中的所有数字中某一个数字k出现的总次数
  8. Confluence 6 附件存储提取文本文件
  9. 无法连接或检测不到外接显示屏
  10. 数据仓库(2)数仓、大数据与传统数据库的区别
  11. MySQL八股文连环45问,你能坚持第几问?
  12. netty 远程主机强迫关闭了一个现有的连接。
  13. 【python入门小知识】实现人名全大写,全小写,首字母大写
  14. 实现jquery双击图片放大
  15. C语言负整数在内存中的存储
  16. 【技巧】解决谷歌浏览器自带的谷歌翻译无法自动翻译问题
  17. 基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。
  18. Dracula这个东西
  19. 东软实训推荐面试问题12:三分钟表现自己使我感兴趣就留下来?
  20. Linux date 命令使用

热门文章

  1. python info什么意思_python中log info 是什么文件
  2. python input函数用法mac_sublime text3解决input()函数无法使用的问题(Python)
  3. html标签%3cli%3e分成两列,使用html自制玫瑰
  4. html音乐播放标签,html5 视频和音乐播放器标签属性
  5. vs2019键盘钩子_江门网站建设:针对Web开发人员的12个最佳Visual Studio代码扩展
  6. python opencv视频流_python – PyQt显示来自opencv的视频流
  7. java的显示图片的控件_调用java在图像控件中显示网络图片
  8. Angr安装与使用之使用篇(十五)
  9. python pip 安装第三方库 mysql模块步骤--pip install mysql-connector-python
  10. 3.第一个HelloMaven/快速入门