Qt中mouseMoveEvent(QmouseEvent *event)使用探讨

在学习网络教程过程中,尝试使用Qpainter制作一个涂鸦板,需要使用QmouseEvent ,按照教程,涂鸦板不能绘制曲线,只能绘制直线。这里做一些总结。
教程链接:http://shouce.jb51.net/qt-beginning/21.html


依据链接的教程所述,mouseMoveEvent实现如上,调试是后面加的,代码中判断语句没有执行进来
ui中关于mouseTracking的设置如上(本例中不需要勾选)
问题确认:
1)ui设计界面勾选mouseTracking或者代码设置setMouseTracking(true);后,不需要按下鼠标左键,移动鼠标即可捕捉鼠标移动事件
2)ui设计界面没有勾选mouseTracking或者代码设置setMouseTracking(false);后(默认不做处理即为该情况),需要按下鼠标左键移动鼠标才可捕捉鼠标移动事件
3)mouseMoveEvent中的evet->button()经调试确认为Qt::NoButton,即代码中的处理不能达到预期的效果,可修改成在mousePressEvent中使用全局变量记住按下的按键,在mouseMoveEvent中使用来判断,修改后代码如下,可以实现涂鸦板作图,绘制曲线。

void Dialog::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter pp(&pix);pp.drawLine(lastpoint / scale, endpoint / scale);lastpoint = endpoint;QPainter painter(this);painter.scale(scale, scale);painter.drawPixmap(0, 0, pix);
}void Dialog::mousePressEvent(QMouseEvent *event)
{lastpress_button = event->button();if (event->button() == Qt::LeftButton) {lastpoint = event->pos();qDebug() << "mousePressEvent pos:" << event->pos() << endl;}
}void Dialog::mouseMoveEvent(QMouseEvent *event)
{qDebug() << "mouseMoveEvent  pos:" << event->pos() << endl;qDebug() << "event->button():" << event->button() << endl;if (lastpress_button & Qt::LeftButton) {endpoint = event->pos();qDebug() << "mouseMoveEvent LeftButtonpress pos:" << event->pos() << endl;update();}
}void Dialog::mouseReleaseEvent(QMouseEvent *event)
{if (event->button() == Qt::LeftButton) {endpoint = event->pos();qDebug() << "mouseReleaseEvent pos:" << event->pos() << endl;update();}
}void Dialog::wheelEvent(QWheelEvent *event)
{if (event->delta() > 0) {    //滚轮向上滚scale *= 1.25;} else if (event->delta() < 0) {scale /= 1.25;}update();
}

Qt中mouseMoveEvent(QmouseEvent *event)使用探讨相关推荐

  1. QT 中的 Graphics View 系统

    这个框架是一个相对成熟的渲染引擎的上层框架,通常也可以会叫做 Scene - View. 在QT中,GraphicsView是一个与QWdiget系列一点点不一样的系统.这个系统主要由下面几个框架类构 ...

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

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

  3. qt中拖动窗口widget

    提要 继承与QDialog的窗口,窗口原本按住标题栏可以拖动窗口,但是设置了窗口的隐藏标题栏属性后,窗口不再能够拖动.或者继承于QWidget的窗体,不具有窗口拖动功能. 本文实现继承于窗口widge ...

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

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

  5. Qt中动态显示六轴机械臂的STL三维模型

    Qt中动态显示六轴机械臂的STL三维模型 运动仿真 STL模型 openGL显示STL ASCII格式的STL文件 读取STL文件 openGL中显示STL模型 运动学变换 两个坑 最终效果 运动仿真 ...

  6. QT中事件与图形处理详细(鼠标、键盘、定时等事件与图片加载处理)

    QT事件 简介:QT程序是事件驱动的,程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开鼠标 ...

  7. Qt 中获取三种坐标类型

    参考一 https://zhuanlan.zhihu.com/p/33874223 参考二 https://www.cnblogs.com/lomper/p/4249575.html void Mai ...

  8. qt中sendevent_Qt Event Dispatcher学习

    距离上次整理Qt事件系统已经过了14个月了.重新理理思绪: Qt中的事件大致可分为3类: Spontaneous events 从系统得到的消息:鼠标按键.键盘按键.定时器事件等.转化为QEvent后 ...

  9. QT中使用rubberband橡皮筋等方法进行选中多个物体

    文章目录 功能介绍 代码介绍 myitem.h/cpp 图形项 myview.h/cpp场景 主函数 结果展示 代码下载 参考 功能介绍 点击左键.按 Shift 键可以单选,按下 Ctrl 可进行多 ...

最新文章

  1. 用matplotlib的imshow显示图像,设置colorbar的颜色范围
  2. linux cat代码,linux cat命令(示例代码)
  3. springboot整合curator实现分布式锁
  4. 距离矢量路由算法_计算机网络自学笔记:选路算法
  5. 读Zepto源码之assets模块
  6. 如何去除视频文件中的杂音爆音?
  7. WIN10 注册表添加启动项
  8. 那些一味顺从领导,不与领导顶嘴的人最后结局都怎么样了?
  9. 在微软工作365天,还你一个我眼中更加真实的微软
  10. 直击|咪蒙公众号自主注销 此前微博已永久关停
  11. PS CS4 序列号永久使用
  12. 关于程序员发展的一些遐想-个人笔记
  13. 基础技术篇 10 ——物联网常见通信协议与通讯协议梳理【下】- 通信协议
  14. word2vec的代码注释
  15. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON12 IPCORE核之FIFO详细教程
  16. 理解Segment Routing和SDWAN
  17. JAVA基础6.59——抽象类(2)
  18. Caused by: java.io.IOException: On-disk size without header provided is 6, but block header contains
  19. 花椒直播列港台为国家被约谈;苏宁云商更名为“苏宁易购”;扎克伯格资产缩水33亿美元丨价值早报
  20. 【笔记】Encoder-Decoder模型

热门文章

  1. 前端面试题总结:模拟面试
  2. JMeter 进行函数助手MD5加密
  3. 让html文字不可选中
  4. 乳腺增生应如何治疗 乳腺增生怎么调理好
  5. 2-12 2-13
  6. JavaAwtSwing笔记之 查看所支持的字体种类字体名称 获取字体列表
  7. 中国首次包揽IOI 2021前四!人大附中邓明扬满分夺金
  8. sqlalchemy.exc.InternalError 问题处理
  9. 苹果机内存满开不了机怎么办?三种办法解决这个问题。
  10. 魔兽怀旧服怎么找不到服务器,魔兽世界怀旧服服务器断开连接解决方法 魔兽世界怀旧服服务器断开连接怎么办...