生活随笔
收集整理的這篇文章主要介紹了
                                
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学习:事件过滤的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。