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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT学习:事件过滤

發(fā)布時間:2024/9/30 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT学习:事件过滤 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

事件過濾器實現(xiàn)動態(tài)圖片按鈕效果,詳細(xì)操作步驟如下:
(1)頭文件“eventfilter.h”中聲明了所需的各種控件及槽函數(shù),其具體代碼如下:

#include <QDialog> #include <QLabel> #include <QImage> #include <QEvent> class EventFilter : public QDialog { Q_OBJECT public: EventFilter(QWidget *parent = 0,Qt::WindowFlags f=0); ~EventFilter(); public slots: bool eventFilter(QObject *, QEvent *); private: QLabel *label1; QLabel *label2; QLabel *label3; QLabel *stateLabel; QImage Image1; QImage Image2; QImage Image3; };

(2)源文件“eventfilter.cpp”的具體代碼如下:

#include "eventfilter.h" #include <QHBoxLayout> #include <QVBoxLayout> #include <QMouseEvent> #include <QMatrix> EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f): QDialog(parent,f) {setWindowTitle(tr("事件過濾"));label1 = new QLabel;Image1.load("../image/1.png");label1->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);label1->setPixmap(QPixmap::fromImage(Image1));label2 = new QLabel;Image2.load("../image/2.png");label2->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);label2->setPixmap(QPixmap::fromImage(Image2));label3 = new QLabel;Image3.load("../image/3.png");label3->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);label3->setPixmap(QPixmap::fromImage(Image3));stateLabel = new QLabel(tr("鼠標(biāo)鍵按下標(biāo)志"));stateLabel->setAlignment(Qt::AlignHCenter);QHBoxLayout *layout=new QHBoxLayout;layout->addWidget(label1);layout->addWidget(label2);layout->addWidget(label3);QVBoxLayout *mainLayout = new QVBoxLayout(this);mainLayout->addLayout(layout);mainLayout->addWidget(stateLabel);label1->installEventFilter(this);label2->installEventFilter(this);label3->installEventFilter(this); }

(3)資源文件的添加如上篇文章所述,這里不再贅述。
(4)QObject的事件監(jiān)視函數(shù)eventFilter()的具體實現(xiàn)代碼如下:

bool EventFilter::eventFilter(QObject *watched, QEvent *event) {if(watched==label1) //首先判斷當(dāng)前發(fā)生事件的對象{//判斷發(fā)生的事件類型if(event->type()==QEvent::MouseButtonPress){//將事件event轉(zhuǎn)化為鼠標(biāo)事件QMouseEvent *mouseEvent=(QMouseEvent *)event;/* 以下根據(jù)鼠標(biāo)鍵的類型分別顯示 */if(mouseEvent->buttons()&Qt::LeftButton){stateLabel->setText(tr("左鍵按下左邊圖片"));}else if(mouseEvent->buttons()&Qt::MidButton){stateLabel->setText(tr("中鍵按下左邊圖片"));}else if(mouseEvent->buttons()&Qt::RightButton){stateLabel->setText(tr("右鍵按下左邊圖片"));}/* 顯示縮小的圖片 */QMatrix matrix;matrix.scale(1.8,1.8);QImage tmpImg=Image1.transformed(matrix);label1->setPixmap(QPixmap::fromImage(tmpImg));}/* 鼠標(biāo)釋放事件的處理,恢復(fù)圖片的大小 */if(event->type()==QEvent::MouseButtonRelease){stateLabel->setText(tr("鼠標(biāo)釋放左邊圖片"));label1->setPixmap(QPixmap::fromImage(Image1));}}else if(watched==label2){if(event->type()==QEvent::MouseButtonPress){//將事件event轉(zhuǎn)化為鼠標(biāo)事件QMouseEvent *mouseEvent=(QMouseEvent *)event;/* 以下根據(jù)鼠標(biāo)鍵的類型分別顯示 */if(mouseEvent->buttons()&Qt::LeftButton){stateLabel->setText(tr("左鍵按下中間圖片"));}else if(mouseEvent->buttons()&Qt::MidButton){stateLabel->setText(tr("中鍵按下中間圖片"));}else if(mouseEvent->buttons()&Qt::RightButton){stateLabel->setText(tr("右鍵按下中間圖片"));}/* 顯示縮小的圖片 */QMatrix matrix;matrix.scale(1.8,1.8);QImage tmpImg=Image2.transformed(matrix);label2->setPixmap(QPixmap::fromImage(tmpImg));}/* 鼠標(biāo)釋放事件的處理,恢復(fù)圖片的大小 */if(event->type()==QEvent::MouseButtonRelease){stateLabel->setText(tr("鼠標(biāo)釋放中間圖片"));label2->setPixmap(QPixmap::fromImage(Image2));}}else if(watched==label3){if(event->type()==QEvent::MouseButtonPress){//將事件event轉(zhuǎn)化為鼠標(biāo)事件QMouseEvent *mouseEvent=(QMouseEvent *)event;/* 以下根據(jù)鼠標(biāo)鍵的類型分別顯示 */if(mouseEvent->buttons()&Qt::LeftButton){stateLabel->setText(tr("左鍵按下右邊圖片"));}else if(mouseEvent->buttons()&Qt::MidButton){stateLabel->setText(tr("中鍵按下右邊圖片"));}else if(mouseEvent->buttons()&Qt::RightButton){stateLabel->setText(tr("右鍵按下右邊圖片"));}/* 顯示縮小的圖片 */QMatrix matrix;matrix.scale(1.8,1.8);QImage tmpImg=Image3.transformed(matrix);label3->setPixmap(QPixmap::fromImage(tmpImg));}/* 鼠標(biāo)釋放事件的處理,恢復(fù)圖片的大小 */if(event->type()==QEvent::MouseButtonRelease){stateLabel->setText(tr("鼠標(biāo)釋放右邊圖片"));label3->setPixmap(QPixmap::fromImage(Image3));}}//將事件交給上層對話框return QDialog::eventFilter(watched,event); }

(5)運行結(jié)果如下圖所示:

總結(jié)

以上是生活随笔為你收集整理的QT学习:事件过滤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。