我需要知道在r
开始时是否按下了一个键(让我们说main()
)。见:
int main(int argc, char *argv[])
{
if(R is pressed)
{} // Do a few things
// Do amazing stuff whatever happened
return a.exec();
}
但是我无法找到一种方法来为所有平台(win,mac,lin)做到这一点,我发现的唯一一件事就是windows的技巧:Using GetKeyState()这不是很令人满意。
答案 0 :(得分:2)
如果要检查修改键(shift,control,alt),可以使用QGuiApplication::queryKeyboardModifiers()
:
int main(int argc, char *argv[])
{
if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{} // Do a few things
// Do amazing stuff whatever happened
return a.exec();
}
答案 1 :(得分:1)
您可以使用Qxt中的QxtGlobalShortcut
类。它提供了一个全球快捷方式,即#34; hotkey"并且即使应用程序未处于活动状态也会触发:
#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()
信号时,将禁用快捷方式并退出事件循环。否则,将激活计时器的超时并退出事件循环。
获取Qxt和编译源后,应将这些添加到.pro文件中:
CONFIG += qxt
QXT += core gui