您可以使用QxtGlobalShortcut
這是Qxt中的一個類。它提供又名「熱鍵」全局快捷鍵,觸發即使在應用程序沒有被激活:
#include <QApplication>
#include <QxtGlobalShortcut>
#include <QTimer>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QEventLoop loop;
QxtGlobalShortcut* shortcut = new QxtGlobalShortcut();
shortcut->setShortcut(QKeySequence("R"));
QObject::connect(shortcut, SIGNAL(activated()), shortcut, SLOT(setDisabled()));
QObject::connect(shortcut, SIGNAL(activated()), &loop,SLOT(quit()));
QTimer::singleShot(300,&loop,SLOT(quit()));
loop.exec();
if(!shortcut->isEnabled())
{
//R is pressed
}
...
return a.exec();
}
在這裏,我們等待最多300毫秒,以檢查鍵被按下。當發出activated()
信號時,快捷鍵被禁用,並且事件循環被取消。否則,定時器的超時被激活並且事件循環退出。如果您想檢查修飾鍵(移動,控制,ALT)
CONFIG += qxt
QXT += core gui
你的意思是關鍵是被壓制? – UmNyobe 2014-09-01 22:03:13
這是非常不尋常的目標。您確定要實施這種奇怪的行爲並讓您的用戶使用它嗎?也許你應該使用更常用的方法,例如命令行選項或GUI。如果你仍然想這樣做,請描述你爲什麼需要它。 – 2014-09-01 22:43:08
@UmNyobe是的,這就是我的意思 – 2014-09-02 07:51:08