【发布时间】:2014-06-05 06:15:02
【问题描述】:
我想检测一个按键序列是否被按下,并想在 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());
我也尝试过这样做:
QCoreApplication::instance()->installEventFilter(new GlobalEventFilter());
在这两种情况下,当我的应用程序窗口打开时,我都能够检测到按键,但在窗口最小化或隐藏时它会失败。如何解决?
【问题讨论】:
-
这个问答的质量比链接的要好得多。我投票决定重新开放。
-
@Adrian 我同意。我重新打开了这个并关闭了另一个作为这个的副本。