我想检测按键序列是否被按下并在该事件上执行某些任务,涉及到it技术和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());
在两种情况下,当我的应用窗口打开时,我能够检测到按键,但是当窗口被最小化或隐藏时,则无法检测到。如何解决这个问题?