日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt::WA_NoMousePropagation用法

發布時間:2023/12/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt::WA_NoMousePropagation用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在QT中,鼠標事件包含:鼠標按鍵按下,鼠標按鍵釋放,鼠標雙擊事件,鼠標移動事件。
分別由下面的event handler(事件處理器,實際上就是一些可override的函數)來處理:

virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseEvent(QMouseEvent *event); virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void mouseMoveEvent(QMouseEvent *event);

鼠標事件屬于冒泡事件,鼠標事件會一直隨著其父鏈一直路由下去,直到有其祖先所在的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用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。