mouseTracking

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

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

【2】Qt Assistant 解释

翻译如下:

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

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

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

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

【3】示例学习

文件列表:

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

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 
 6 namespace Ui {
 7 class MainWindow;
 8 }
 9 
10 class MainWindow : public QMainWindow
11 {
12     Q_OBJECT
13 
14 public:
15     explicit MainWindow(QWidget *parent = 0);
16     ~MainWindow();
17 
18 private:
19     Ui::MainWindow *ui;
20 };
21 
22 #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

 1 #ifndef MYLABEL_H
 2 #define MYLABEL_H
 3 
 4 #include <QLabel>
 5 #include <QMouseEvent>
 6 
 7 class MyLabel : public QLabel
 8 {
 9 public:
10     MyLabel(QWidget* parent = NULL);
11 
12 protected:
13     void mouseMoveEvent(QMouseEvent *event);
14     void mousePressEvent(QMouseEvent *event);
15     void mouseReleaseEvent(QMouseEvent *event);
16 };
17 
18 #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

 1 #include "MainWindow.h"
 2 #include <QApplication>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7     MainWindow w;
 8     w.show();
 9 
10     return a.exec();
11 }

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

所有文件如上。

【3】运行效果图

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值