从Windows启动程序时如何查看键盘修饰符?

时间:2019-05-31 04:28:37

标签: c++ qt

我有一个Qt应用程序,并且想确定在启动应用程序时是否按住Shift(或Ctrl)键。我的目标是为应用程序实现“安全模式”。

我尝试使用QApplication::keyboardModifiers(),但是无论我双击应用程序还是从命令行启动,无论我按下应用程序时按住哪个键,该函数始终返回0(无修饰符)。

int main(int argc, char *argv[]) {

    QString homeDocs = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)+"/";
    QCoreApplication::setApplicationName(getAppName());
    QCoreApplication::setOrganizationName(getDeveloperName());
    QCoreApplication::setOrganizationDomain(getDeveloperDomain());

    QSettings settings;

    QApplication a(argc, argv);
    QStringList args = a.arguments();

    Qt::KeyboardModifiers test = QApplication::keyboardModifiers();

正在接收代码0,但希望看到位标记指示按下了哪些键。

2 个答案:

答案 0 :(得分:1)

使用QApplication::queryKeyboardModifiers()代替QApplication::keyboardModifiers()

有关更多详细信息,请参见docs

示例:

Qt::KeyboardModifiers key = QApplication::queryKeyboardModifiers();

if(key == Qt::ShiftModifier){
    qDebug() << "Shift key is pressed";
}

if(key == Qt::ControlModifier){
    qDebug() << "Ctrl key is pressed";
}

答案 1 :(得分:-1)

我认为您倾向于实现一个功能,该功能将在按下Ctrl键足够长的时间后运行。 您可以覆盖mousePressEvent来确认按下Ctrl键并启动一个计时器,然后您还应该覆盖mouseReleaseEvent来确认计时器按下ctrl多长时间。