ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt-事件过滤及实例

2022-03-21 16:03:57  阅读:183  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有