Qt获取没有事件侦听器的应用程序状态
我需要知道当Qt获取没有事件侦听器的应用程序状态,qt,keypress,Qt,Keypress,我需要知道当main()启动时是否按下了一个键(比如r)。见: 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的一个技巧:这不是很令人满意……你可以使
main()
启动时是否按下了一个键(比如r
)。见:
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的一个技巧:这不是很令人满意……你可以使用
QxtGlobalShortcut
这是一个类。它提供了一个全局快捷方式,也称为“热键”,即使应用程序未处于活动状态,也会触发:
#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();
}
如果要检查修改器键(shift、control、alt),可以使用
QGUI应用程序::queryKeyboardModifiers()
:
你是说钥匙被按住了?这是一个非常不寻常的进球。您确定要实现这种奇怪的行为并让您的用户使用它吗?也许您应该使用更常见的方法,例如命令行选项或GUI。如果你还想这样做,请描述一下你为什么需要它。@UmNyobe是的,这就是我想要的mean@PavelStrakhov我需要在启动时实现一个重置选项,可供Noobt使用。这听起来是一个很好的解决方案,但我们不能仅通过
Qt
实现同样的效果吗?
CONFIG += qxt
QXT += core gui
int main(int argc, char *argv[])
{
if(QGuiApplication::queryKeyboardModifiers().testFlag(Qt::ShiftModifier))
{} // Do a few things
// Do amazing stuff whatever happened
return a.exec();
}