首页 > 其他 > 详细

QT全局事件

时间:2020-05-09 23:59:31      阅读:128      评论:0      收藏:0      [点我收藏+]

全局事件:

默认事件只是针对于一个区域,比如控件,不是整体所有控件得事件,而全局事件,是所有控件汇总得地方。

 

目的:

实现只要在程序内就可随意点击按键,就会监测到

 

实现方式:

通过继承QApplication,编写事件过滤器实现。

 

下面例子要实现得功能是:

长按空格录音,所以空格按下表示开始录音,抬起表示录音结束。

 

GlobalApplication.h

#include <QApplication>
#include <QWidget>

class GlobalApplication : public QApplication
{
public:
     GlobalApplication(int&argc,char **argv);
     ~GlobalApplication();

     // bool notify(QObject*, QEvent *);
     bool eventFilter(QObject *, QEvent *);
private:
     QWidget *widget;
};

 

GlobalApplication.cpp

#include "GlobalApplication.h"
#include <QEvent>
#include <QKeyEvent>
#include <QDebug>

GlobalApplication::GlobalApplication(int &argc,char **argv):
QApplication(argc,argv)
{
    // 必须要安装过滤器
    this->installEventFilter(this);
}

GlobalApplication::~GlobalApplication()
{

}

// 监测得空格
bool GlobalApplication::eventFilter(QObject *object, QEvent *event)
{
    if (event->type() == QEvent::KeyPress)
    {
        QKeyEvent *key_press = static_cast<QKeyEvent *>(event);
        if (key_press->key() == Qt::Key_Space && !key_press->isAutoRepeat())
        {
            qDebug() << "start";
            //拦截
            return true;
        }
    }
    else if(event->type() == QEvent::KeyRelease)
    {
        QKeyEvent *key_release = static_cast<QKeyEvent *>(event);
        if (key_release->key() == Qt::Key_Space && !key_release->isAutoRepeat())
        {
            qDebug() << "stop";
            //拦截
            return true;
        }
    }
    //不进行拦截
    return false;
}

// QEvent::KeyPress  键盘按下事件

// QEvent::KeyRelease 键盘按下抬起事件

// key_press->isAutoRepeat() 这点很重要,默认持续长按就返回true,加上这个取反表示一直按着也指表示按了一次

 

main.cpp

#include "MainWindow.h"
#include <QApplication>
#include "GlobalApplication.h"

int main(int argc, char *argv[])
{
    GlobalApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

 

QT全局事件

原文:https://www.cnblogs.com/zezhou/p/12861089.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!