Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt获取没有事件侦听器的应用程序状态_Qt_Keypress - Fatal编程技术网

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();
}