生活随笔
收集整理的這篇文章主要介紹了
QT学习:事件过滤
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
事件過濾器實現動態圖片按鈕效果,詳細操作步驟如下:
(1)頭文件“eventfilter.h”中聲明了所需的各種控件及槽函數,其具體代碼如下:
#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("鼠標鍵按下標志"));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的事件監視函數eventFilter()的具體實現代碼如下:
bool EventFilter
::eventFilter(QObject
*watched
, QEvent
*event
)
{if(watched
==label1
) {if(event
->type()==QEvent
::MouseButtonPress
){QMouseEvent
*mouseEvent
=(QMouseEvent
*)event
;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
));}if(event
->type()==QEvent
::MouseButtonRelease
){stateLabel
->setText(tr("鼠標釋放左邊圖片"));label1
->setPixmap(QPixmap
::fromImage(Image1
));}}else if(watched
==label2
){if(event
->type()==QEvent
::MouseButtonPress
){QMouseEvent
*mouseEvent
=(QMouseEvent
*)event
;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
));}if(event
->type()==QEvent
::MouseButtonRelease
){stateLabel
->setText(tr("鼠標釋放中間圖片"));label2
->setPixmap(QPixmap
::fromImage(Image2
));}}else if(watched
==label3
){if(event
->type()==QEvent
::MouseButtonPress
){QMouseEvent
*mouseEvent
=(QMouseEvent
*)event
;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
));}if(event
->type()==QEvent
::MouseButtonRelease
){stateLabel
->setText(tr("鼠標釋放右邊圖片"));label3
->setPixmap(QPixmap
::fromImage(Image3
));}}return QDialog
::eventFilter(watched
,event
);
}
(5)運行結果如下圖所示:
總結
以上是生活随笔為你收集整理的QT学习:事件过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。