【1】mouseTracking 追踪鼠标的标志位

作用:保存窗口部件默认是否接收鼠标移动事件。此成员变量在QWidget类中。

【2】Qt Assistant 解释

翻译如下:

这个属性保存部件窗口是否追踪鼠标。

如果部件窗口不(默认值)追踪鼠标,那么,当鼠标在部件窗口内移动时候,只有鼠标按键在至少一次被按下之后,这个窗口部件才会接收鼠标移动事件。

如果部件窗口追踪鼠标,那么即使没有鼠标按键被按下,这个部件窗口也会接收鼠标移动事件。

总之,窗口部件默认不直接接收鼠标移动事件,想要其默认就直接接收鼠标移动事件,需要预置mouseTracking标志为true。

【3】示例学习

文件列表:

文件1:MainWindows.h(QtCreator 默认创建工程文件,未做修改)

 #ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); private:
Ui::MainWindow *ui;
}; #endif // MAINWINDOW_H

文件2:MainWindows.cpp(QtCreator 默认创建工程文件,未做修改)

#include "MainWindow.h"
#include "ui_MainWindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
} MainWindow::~MainWindow()
{
delete ui;
}

文件3:自定义MyLabel,头文件MyLabel.h

 #ifndef MYLABEL_H
#define MYLABEL_H #include <QLabel>
#include <QMouseEvent> class MyLabel : public QLabel
{
public:
MyLabel(QWidget* parent = NULL); protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
}; #endif // MYLABEL_H

文件4:自定义MyLabel,头文件MyLabel.cpp (此类的构造函数会对mouseTracking进行设置。另外,重实现鼠标移动、鼠标按下、鼠标释放事件)

#include "MyLabel.h"

MyLabel::MyLabel(QWidget *parent) : QLabel(parent)
{
setMouseTracking(true);
setStyleSheet ("background-color:rgb(190, 190, 190); color:rgb(0, 0, 0);");
} void MyLabel::mouseMoveEvent(QMouseEvent *event)
{
setText(QString("<center><h1>Move:(%1, %2)</h1></center>").arg(QString::number(event->x()),
QString::number(event->y())));
} void MyLabel::mousePressEvent(QMouseEvent *event)
{
setText(QString("<center><h1>Press:(%1, %2)</h1></center>").arg(QString::number(event->x()),
QString::number(event->y())));
} void MyLabel::mouseReleaseEvent(QMouseEvent *event)
{
QString msg;
msg.sprintf("<center><h1>Release:(%d, %d)</h1></center>", event->x(), event->y());
this->setText(msg);
}

文件5: main.cpp

 #include "MainWindow.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}

文件6:UI界面设计如下图。注意:一个MainWindows窗体,中央位置拖一个QLable,然后把QLabel提升为MyLabel即可。

所有文件如上。

【3】运行效果图

在MyLabel.cpp文件中,构造函数会对mouseTracking进行设置。可以试着屏蔽设置(默认值为false)再观察窗口接收鼠标事件的效果。

mouseTracking的更多相关文章

  1. PyQt(Python+Qt)学习随笔:Qt Designer中部件的mouseTracking和tabletTracking属性

    在Qt Designer中的部件属性设置中,有mouseTracking和tabletTracking两个属性,这两个属性是跟踪鼠标或平板触控笔的移动轨迹的. 一.mouseTracking mous ...

  2. 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)

    利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...

  3. Qt5_简易画板_详细注释

    代码下载链接:  http://pan.baidu.com/s/1hsc41Ek 密码: 5hdg 显示效果如下: 代码附有详细注释(代码如下) /*** * 先新建QMainWindow, 项目名称 ...

  4. Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good

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

  5. 卡尔曼滤波—Simple Kalman Filter for 2D tracking with OpenCV

    之前有关卡尔曼滤波的例子都比较简单,只能用于简单的理解卡尔曼滤波的基本步骤.现在让我们来看看卡尔曼滤波在实际中到底能做些什么吧.这里有一个使用卡尔曼滤波在窗口内跟踪鼠标移动的例子,原作者主页:http ...

  6. Qt消息机制和事件(一)

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

  7. QWidget属性,函数的学习

    我把所有属性重新按功能排了一遍,这样才能灌到自己脑子里,并且方便自己以后查找: -------------------- 颜色/渲染方式 -----------------------QWidget: ...

  8. Qt 学习之路 :事件

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

  9. Qt的setMouseTracking使用

    bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效. 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件. 如果鼠 ...

随机推荐

  1. 20165336 学习基础与C语言基础调查

    20165336 技能学习心得与c语言学习 一.心得体会 做教练 从老师的健身教练健身学员的学习关系中我懂得了学生应该有自主的学习意识,要有计划地去训练.去流汗,并且要以100分的要求严于律己,老师是 ...

  2. 1、python同级目录及子目录模块引入

    2个模块在同一个包内时(即引入和被引入的2个py文件在同一个目录下),直接引入模块名 1.引入与被引入模块或包在同一目录下时,直接引入模块名或者包名import modulename.py或者impo ...

  3. swift 颜色设置方法

    如下: func RGB(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor { return UIColor.init(red: r ...

  4. 虚存管理页面置换算法 — FIFO和RUL算法模拟实现

    本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...

  5. JDBC和hibernate,mybatis的比较

    在学习使用mybatis之前,先比较下jdbc编程和hibernate编程各自的优缺点. JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动 ...

  6. memcached命令知识

    memcached安装配置 yum install memcached      memcached最大的缓存单位为1M,大于1M的单项数据将不会缓存      memcached是基于文本协议的,所 ...

  7. 014-通过JDB调试,通过HSDB来查看HotSpot VM的运行时数据

    一.JDB调试        在预发环境下进行debug时,时常因为工具和环境的限制,导致debug体验非常差,那么有什么方法能够简化我们进行debug的体验吗?JDB就是一种.        JDB ...

  8. 20165236 2017-2018-2 《Java程序设计》第九周学习总结

    20165236 2017-2018-2 <Java程序设计>第九周学习总结 一.第十三章教材内容总结 1.URL类 URL类是java.net包中的一个重要的类,使用URL创建对象的应用 ...

  9. pycharm的安装和使用

    python开发IDE:  pycharm.eclipse 1.要专业版 2.不要汉化版 一.运算符 +  -  * ./  **   %  // 判断某个东西是否在东西里面包含 in   not   ...

  10. 前端文档汇总(含代码规范、开发流程、知识分享,持续更新) front-end-Doc

    https://juejin.im/post/5b1205b1f265da6e1a602a62 https://juejin.im/post/5b1205b1f265da6e1a602a62 http ...