关闭

Qt学习之路之鼠标事件

标签: qt
152人阅读 评论(0) 收藏 举报
分类:

本文转载自:CSDN - 知其所以然

原文链接:http://blog.csdn.net/HK_5788/article/details/42529835


鼠标事件包括移动,鼠标按下,释放(松开),单击,双击.......

自定义鼠标事件,需重写虚函数:

  1. void QWidget::mousePressEvent(QMouseEvent * event) [virtual protected]  
  2. void QWidget::mouseReleaseEvent(QMouseEvent * event) [virtual protected]  
  3. void QWidget::mouseMoveEvent(QMouseEvent * event) [virtual protected]  
  4. void QWidget::mouseDoubleClickEvent(QMouseEvent * event) [virtual protected]  
简单示例:

mouse_widget.h

  1. #ifndef MOUSEWIDGET_H  
  2. #define  MOUSEWIDGET_H  
  3.   
  4. #include <QWidget>  
  5. #include <QMainWindow>  
  6. #include <QLabel>  
  7. #include <QStatusBar>  
  8. #include <QMouseEvent>  
  9. #include <QTextCodec>  
  10.   
  11. class MouseEvent : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14. public:  
  15.     MouseEvent(QWidget *parent = 0);  
  16.   
  17. protected:  
  18.     void mousePressEvent(QMouseEvent *e);       //--鼠标按下事件  
  19.     void mouseMoveEvent(QMouseEvent *e);    //--鼠标移动事件  
  20.     void mouseReleaseEvent(QMouseEvent *e); //--鼠标释放(松开)事件  
  21.     void mouseDoubleClickEvent(QMouseEvent *e); //--鼠标双击事件  
  22.   
  23. private:  
  24.     QLabel *statusLabel;                //---显示鼠标移动时的实时位置   
  25.     QLabel *mousePointLabel;        //---显示鼠标位置  
  26. };  
  27.   
  28. #endif  //MOUSEWIDGET_H  

mouse_widget.cpp
  1. #include "mouse_widget.h"  
  2.   
  3. MouseEvent::MouseEvent(QWidget *parent /*= 0*/) : QMainWindow(parent)  
  4. {  
  5.     //----Qt5解决中文乱码  
  6.     QTextCodec *codec = QTextCodec::codecForName("GB18030");  
  7.       
  8.     //---显示鼠标移动时的实时位置   
  9.     statusLabel = new QLabel();  
  10.     statusLabel->setText(codec->toUnicode("当前位置:"));  
  11.     statusLabel->setFixedWidth(100);  
  12.   
  13.     //---显示鼠标位置  
  14.     mousePointLabel = new QLabel();  
  15.     mousePointLabel->setText("");  
  16.     mousePointLabel->setFixedWidth(100);  
  17.       
  18.     //---在状态栏增加控件  
  19.     statusBar()->addPermanentWidget(statusLabel);  
  20.     statusBar()->addPermanentWidget(mousePointLabel);  
  21.   
  22.     //---设置当前窗体对鼠标追踪,默认为false,false表示不追踪  
  23.     setMouseTracking(true);  
  24.   
  25.     //----设置窗口属性  
  26.     setWindowTitle(codec->toUnicode("鼠标事件信息"));  
  27.     //----窗口大小  
  28.     resize(400, 150);  
  29. }  
  30.   
  31. //--鼠标按下事件  
  32. void MouseEvent::mousePressEvent(QMouseEvent *e)  
  33. {  
  34.     //----Qt5解决中文乱码  
  35.     QTextCodec *codec = QTextCodec::codecForName("GB18030");  
  36.   
  37.     //----QMouseEvent类提供的x()和y()可获取鼠标相对窗口的位置  
  38.     QString str = "("+QString :: number(e->x()) +", "+QString::number(e->y())+")";  
  39.   
  40.     //---点击左键  
  41.     if (Qt ::LeftButton == e->button())  
  42.     {  
  43.         statusBar()->showMessage(codec->toUnicode("左键:") + str);  
  44.     }  
  45.     //---点击左键  
  46.     if (Qt ::RightButton == e->button())  
  47.     {  
  48.         statusBar()->showMessage(codec->toUnicode("右键:") + str);  
  49.     }  
  50.     //---点击左键  
  51.     if (Qt ::MidButton == e->button())  
  52.     {  
  53.         statusBar()->showMessage(codec->toUnicode("中键:") + str);  
  54.     }  
  55. }  
  56.   
  57. //---鼠标释放(松开)事件  
  58. void MouseEvent::mouseReleaseEvent(QMouseEvent *e)  
  59. {  
  60.     //----Qt5解决中文乱码  
  61.     QTextCodec *codec = QTextCodec::codecForName("GB18030");  
  62.   
  63.     //----QMouseEvent类提供的x()和y()可获取鼠标相对窗口的位置  
  64.     QString str = "("+QString :: number(e->x()) +", "+QString::number(e->y())+")";  
  65.     statusBar()->showMessage(codec->toUnicode("鼠标位置:") + str, 3000);  
  66. }  
  67.   
  68. //--s鼠标双击事件  
  69. void MouseEvent::mouseDoubleClickEvent(QMouseEvent *e)  
  70. {  
  71.     //---没有实现功能  
  72. }  
  73.   
  74. //--鼠标移动事件  
  75. void MouseEvent::mouseMoveEvent(QMouseEvent *e)  
  76. {  
  77.     mousePointLabel->setText("("+QString::number(e->x())+", "+QString :: number(e->y())+")");  
  78. }  
main.cpp
  1. #pragma once  
  2. #include <QtWidgets/QApplication>  
  3. #include "mouse_widget.h"  
  4.   
  5. int main(int argc, char *argv[])  
  6. {  
  7.     QApplication a(argc, argv);  
  8.   
  9.     MouseEvent win;  
  10.     win.show();  
  11.   
  12.     return a.exec();  
  13. }  
运行结果图:



当用户用鼠标在指定区域内触发相应的鼠标事件,窗口的状态栏将会实时显示鼠标的动态信息。如点击鼠标左键,移动鼠标将会在状态栏实时显示鼠标的坐标~~

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Qt学习之路(32): 一个简易画板的实现(Graphics View)

Qt学习之路(32): 一个简易画板的实现(Graphics View) 2009-12-15 23:42:46 标签:C++ 教程 学习 QT教程 Qt 原创作品,允许转载,转...
  • carrie0728
  • carrie0728
  • 2016-07-07 16:20
  • 1736

Qt学习之路系列教程目录

导语 《Qt 学习之路》是在网络上受到一定欢迎的 Qt 入门教程。只是这个系列便携与 2009 年,至今已经有三年多的时间。今天的 Qt 有了很大的变化,包括 Qt Quick 的加入、...
  • u014365862
  • u014365862
  • 2016-11-23 21:46
  • 4764

Qt Quick事件处理之鼠标、键盘、定时器

在《Qt on Android: Qt Quick 事件处理之信号与槽》中介绍了 QML 中如何使用内建类型的信号以及如何自定义信号,这次我们来看看如何处理鼠标、键盘、定时器等事件。这些时间在处理时,...
  • foruok
  • foruok
  • 2014-06-13 14:12
  • 18188

Qt学习之路之鼠标事件

原文链接:http://blog.csdn.net/HK_5788/article/details/42529835 因为在原文页面没看到收藏功能,自己就转载了一下,相当于收藏吧。 ...
  • yyq_9623
  • yyq_9623
  • 2018-01-09 09:05
  • 22

Qt学习之路——— Qt键盘、鼠标事件的处理

事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。对于初学者,总会对Qt中信号和事件的概念混淆不清。其实,记住事件比信号更底层就可以了。比如说,我们用鼠标按下界面上的一个按...
  • xiaoluoshan
  • xiaoluoshan
  • 2016-11-12 19:45
  • 436

Qt学习: 鼠标事件总结(转)

1、QMouseEvent中的坐标 QMouseEvent中保存了两个坐标,一个是全局坐标,当然另外一个是局部坐标。 全局坐标(globalPos())即是桌面屏幕坐标(screen coordi...
  • qq_37233607
  • qq_37233607
  • 2017-10-24 19:30
  • 62

QT鼠标事件示例

  • 2016-04-01 17:50
  • 5KB
  • 下载

Qt界面最小化获取键盘鼠标事件-windows消息-windows_hook

  • 2016-12-03 10:49
  • 9.13MB
  • 下载

qt图像处理,文字处理软件(菜单+工具栏+鼠标事件+定时器)

  • 2017-01-12 13:50
  • 1.10MB
  • 下载

qt实现类似QQ伸缩窗口--鼠标事件应用

  • 2016-06-06 00:35
  • 34.70MB
  • 下载
    个人资料
    • 访问:327274次
    • 积分:8806
    • 等级:
    • 排名:第2521名
    • 原创:574篇
    • 转载:13篇
    • 译文:0篇
    • 评论:36条
    我的链接
    最新评论