Qt::WA_NoMousePropagation用法
生活随笔
收集整理的這篇文章主要介紹了
Qt::WA_NoMousePropagation用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在QT中,鼠標事件包含:鼠標按鍵按下,鼠標按鍵釋放,鼠標雙擊事件,鼠標移動事件。
分別由下面的event handler(事件處理器,實際上就是一些可override的函數)來處理:
鼠標事件屬于冒泡事件,鼠標事件會一直隨著其父鏈一直路由下去,直到有其祖先所在的widget接受它,或者有事件過濾器消耗它。
注意:如果鼠標事件被路由到包含Qt:: WA_NoMousePropagation窗口屬性(即該屬性設置為true)的窗口小部件,該鼠標事件不會進一步沿著父控件鏈路由。如下代碼:
#include "MainWindow.h" #include<QMouseEvent> #include <QPainter> #include <QDebug> #include <QVBoxLayout> #include <QPushButton> #include <QLabel>MainWindow::MainWindow(QWidget* parent): QMainWindow(parent) {ui.setupUi(this);this->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);this->setFixedSize(500, 500);QWidget* wg1 = new QWidget(this);wg1->setFixedSize(300, 300);wg1->setStyleSheet("background-color:black;");QWidget* wg2 = new QWidget(wg1);wg2->setFixedSize(100, 100);wg2->setStyleSheet("background-color:red;");QHBoxLayout* m_layout = new QHBoxLayout;wg2->setLayout(m_layout);QPushButton* m_btn1 = new QPushButton(wg2);m_layout->addWidget(m_btn1);m_btn1->setText("--btn1--");// 當屬性為false時,下面這句可以屏蔽,因為該屬性默認就是flase的m_btn1->setAttribute(Qt::WA_NoMousePropagation, false);QLabel* m_label = new QLabel(wg2);m_label->setFixedSize(20, 100);m_layout->addWidget(m_label);m_label->setStyleSheet("background-color:pink");// 按鈕鼠標跟蹤事件要設置為true,否則鼠標在按鈕上移動不會激發mouseMoveEventm_btn1->setMouseTracking(true); setMouseTracking(true);wg1->setMouseTracking(true);wg2->setMouseTracking(true);}void MainWindow::mouseMoveEvent(QMouseEvent* event) {QPoint p_ab = event->globalPos();QPoint p_re = event->pos();QString str;str = QString("%1 , %2").arg(p_ab.x()).arg(p_ab.y());qInfo() << str;}運行結果如下:
可以看到,當按鈕的Qt::WA_NoMousePropagation屬性設置為false時,鼠標在按鈕上的移動事件傳遞到MainWindow中了。當改為下面代碼
?m_btn1->setAttribute(Qt::WA_NoMousePropagation, true);
則MainWindow無法收到鼠標在按鈕上的移動事件
總結
以上是生活随笔為你收集整理的Qt::WA_NoMousePropagation用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 英伟达驱动代码中发现游戏《反恐精英:全球
- 下一篇: Qt::WA_TransparentFo