Git   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何检测Qt中的全局按键顺序?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我想要检测一个按键序列是否被按下,并想要在Qt中执行某个任务。 目前,我可以检测某些小部件的按键,但是如何检测全局按键。 就全球而言,我的意思是即使应用程序被最小化或隐藏,也应该检测按键。

我试着为应用程序做一个eventFilter ,首先像这样重载QObject::eventFilter :

bool GlobalEventFilter::eventFilter(QObject *Object,QEvent *Event) { if (Event->type() == QEvent::KeyPress) { QKeyEvent *KeyEvent = (QKeyEvent*)Event; switch(KeyEvent->key()) { case Qt::Key_F1: cout<<"F1 press detected"<<endl; return true; default: break; } } return QObject::eventFilter(Object,Event); }

然后安装该对象作为我的应用程序的eventFilter :

QApplication a(argc,argv); a.installEventFilter(new GlobalEventFilter());

我也试过这样做:

如何在后台运行一个函数

使用POSIX API的文件读取

AF_UNIX的整数值是多less?

Windows大写转换文件崩溃

Xlib与_NET_ACTIVE_WINDOW和XGeTinputFocus之间的区别

QCoreApplication::instance()->installEventFilter(new GlobalEventFilter());

在这两种情况下,我都能够在应用程序窗口打开时检测按键,但在窗口最小化或隐藏时失败。 如何解决这个问题?

c ++可执行文件从命令行运行,但不能从eclipse运行

在程序运行的时候可以获得程序的输出吗?

在DirectFB中清除数据缓冲区的最佳方法

可以用C改变屏幕亮度?

FILE *“/ dev / stdout”和stdout之间的区别

请参阅QKeyEvent的文档:

当键被按下或释放时,按键事件被发送到具有键盘输入焦点的小部件。

这意味着,如果你想使用QKeyEvent ,你需要有键盘焦点。 过滤这些事件也不会在概念上改变这一点。 我不知道你从哪里得到过滤的想法。

可能需虑其他解决方案,例如如何在kwin中实现它等等。一般来说,要小心这个用例。 没有最终用户的注意,它可以做怪异的事情。

你可以看看这个班级:

QxtGlobalShortcut类参

可以这样写

main.cpp中

#include <QxtGlobalShortcut> #include <QApplication> #include <QMainWindow> #include <QDebug> class MyGlobalShortcutHandler : public QObject { Q_OBjeCT public: explicit MyGlobalShortcutHandler(QObject *parent = 0) : QObject(parent) { m_globalShortcut.setShortcut(QKeySequence("Ctrl+Shift+X")); m_globalShortcut.setEnabled(true); connect(&m_globalShortcut,SIGNAL(activated()),SLOT(handleGlobalShortcut())); } public slots: void handleGlobalShortcut() { qDebug() << "Global shortcut handled"; } private: QxtGlobalShortcut m_globalShortcut; }; #include "main.moc" int main(int argc,char **argv) { QApplication application(argc,argv); QMainWindow mainWindow; MyGlobalShortcutHandler myGlobalShortcut(); mainWindow.show(); return application.exec(); }

main.pro

TEMPLATE = app TARGET = main greaterThan(QT_MAJOR_VERSION,4): QT += widgets CONfig += qxt QXT = core gui sourcES += main.cpp

建立和运行

qmake-qt4 && make && ./main

这个代码至少应该和Qt 4一起工作。 它打印出我的调试语句。 你可以很容易地验证这一点。

要获得libqxt库,请访问以下链接

http://dev.libqxt.org/libqxt/wiki/Home

这个特性在Qt中没有实现。 你可以使用Qxt 。 Qxt是Qt的一个扩展库,提供了一套跨平台的工具类来添加Qt中不易获得的@L_874_23@。 它具有全局快捷键(热键),即使应用程序被最小化也可检测按键。

将应用程序编译并链接到Qxt后,可以包含QxtGlobalShortcut:

#include <QxtGlobalShortcut>

@L_450_25@示例:

QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window); connect(shortcut,window,SLOT(toggleVisibility())); shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12"));

大佬总结

以上是大佬教程为你收集整理的如何检测Qt中的全局按键顺序?全部内容,希望文章能够帮你解决如何检测Qt中的全局按键顺序?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: