mouseTracking
【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的更多相关文章
- PyQt(Python+Qt)学习随笔:Qt Designer中部件的mouseTracking和tabletTracking属性
在Qt Designer中的部件属性设置中,有mouseTracking和tabletTracking两个属性,这两个属性是跟踪鼠标或平板触控笔的移动轨迹的. 一.mouseTracking mous ...
- 【翻译】利用Qt设计师窗体在运行时创建用户界面(Creating a user interface from a Qt Designer form at run-time)
利用Qt设计师窗体在运行时创建用户界面 我们利用Calculator窗体例子中创建的窗体(Form)来展示当一个应用(application)已经生成后,是可以在其运行时产生与例子中相同的用户界面. ...
- Qt5_简易画板_详细注释
代码下载链接: http://pan.baidu.com/s/1hsc41Ek 密码: 5hdg 显示效果如下: 代码附有详细注释(代码如下) /*** * 先新建QMainWindow, 项目名称 ...
- Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good
事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...
- 卡尔曼滤波—Simple Kalman Filter for 2D tracking with OpenCV
之前有关卡尔曼滤波的例子都比较简单,只能用于简单的理解卡尔曼滤波的基本步骤.现在让我们来看看卡尔曼滤波在实际中到底能做些什么吧.这里有一个使用卡尔曼滤波在窗口内跟踪鼠标移动的例子,原作者主页:http ...
- Qt消息机制和事件(一)
一,事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等 ...
- QWidget属性,函数的学习
我把所有属性重新按功能排了一遍,这样才能灌到自己脑子里,并且方便自己以后查找: -------------------- 颜色/渲染方式 -----------------------QWidget: ...
- Qt 学习之路 :事件
事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...
- Qt的setMouseTracking使用
bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效. 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件. 如果鼠 ...
随机推荐
- AT3611 Tree MST 点分治+最小生成树
正解:点分治+最小生成树 解题报告: 传送门! 然后这题麻油翻译,,,所以这边的建议是先说下题意呢亲 所以题意大概就是说,给一棵n个节点的树,树上每个点都有个权值,然后构造一个完全图,(u,v)之间连 ...
- B+树vs. LSM树(转)
原文:<大型网站技术架构:核心原理与案例分析>,作者:李智慧 本书前面提到,由于传统的机械磁盘具有快速顺序读写.慢速随机读写的访问特性,这个特性对磁盘存储结构和算法的选择影响甚大. 为了改 ...
- Ubuntu14.04 LTS 安装Chrome浏览器(转)
add zhj: 亲测过,可以,原来不用FQ就可以下载,有点意外 原文:http://www.jianshu.com/p/8220578d0b15 1.打开终端(ctrl + alt + t),下载6 ...
- MHA 实现VIP切换用到脚本
在MHA Manager端配置中,如果实现MHA的vip故障切换需要在配置文件/etc/masterha/app1/app1.cnf 中启用下面三个参数: master_ip_failover_scr ...
- 2017-2018-2 20165236 实验三《Java面向对象程序设计》实验报告
2017-2018-2 20165236 实验三<Java面向对象程序设计>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652 姓名:郭金涛 ...
- java -jstack
一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...
- 死锁与递归锁 信号量 event 线程queue
1.死锁现象与递归锁 死锁:是指两个或两个以上的进程或线程在执行过程中,因争抢资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁,这些永远在互相 ...
- Py中enumerate方法【转载】
转自:http://www.runoob.com/python/python-func-enumerate.html enumerate(sequence, [start=0]) sequence - ...
- C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作,无法为请求的 Configuration 对象创建配置文件。
应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config). 配置文件,对于程序本身来说,就是基础和依据,其本 ...
- 利用Tensorflow实现逻辑回归模型
官方mnist代码: #下载Mnist数据集 import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read ...