1

我有一个 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,但期待指示哪些键被按下的位标志。

4

2 回答 2

1

使用QApplication::queryKeyboardModifiers()而不是QApplication::keyboardModifiers().

有关更多详细信息,请参阅文档

例子:

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

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

if(key == Qt::ControlModifier){
    qDebug() << "Ctrl key is pressed";
}
于 2019-05-31T17:16:06.367 回答
-1

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

于 2019-05-31T15:43:39.363 回答