标签:event Qt 实例 button QObject 过滤 Key include MainWindow
事件过滤器功能使得一个QObject对象可以监视另一个QObject对象中的事件,通过在一个QObject对象中安装事件过滤器,可以在事件到达该对象前捕获事件,从而起到监视该对象的作用。
例如,实现按下按钮时,按钮上的文字为“Key Down”,松开按钮时,按钮上的文字为“Key Up”,创建一个QMainWindow窗口
1. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QPushButton;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
bool eventFilter(QObject* watched, QEvent* event);
private:
Ui::MainWindow *ui;
QPushButton* m_button;
};
#endif // MAINWINDOW_H
2. mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPushButton>
#include <QMouseEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_button = new QPushButton("Key Up", this);
m_button->installEventFilter(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == m_button)
{
if(event->type() == QEvent::MouseButtonPress) //鼠标按下
{
QMouseEvent* mouseEvent = (QMouseEvent*)event;
if(mouseEvent->buttons() & Qt::LeftButton) //左键按下
{
m_button->setText("Left Key Down");
}
else if(mouseEvent->buttons() & Qt::MidButton)
{
m_button->setText("Middle Key Down");
}
else if(mouseEvent->buttons() & Qt::RightButton)
{
m_button->setText("Right Key Down");
}
}
else if(event->type() == QEvent::MouseButtonRelease) //鼠标释放
{
m_button->setText("Key Up");
}
}
//将事件交给上层对话框
return QObject::eventFilter(watched, event);
}
标签:event,Qt,实例,button,QObject,过滤,Key,include,MainWindow 来源: https://www.cnblogs.com/xiang-L/p/16035095.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。