Как увидеть модификаторы клавиатуры при запуске программы из Windows? - PullRequest
1 голос
/ 31 мая 2019

У меня есть приложение 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 ]

1 голос
/ 31 мая 2019

Используйте 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";
}
0 голосов
/ 31 мая 2019

Я думаю, что вы склонны реализовывать функцию, которая будет запускаться, если Ctrl был нажат достаточно времени.
Вы можете переопределить mousePressEvent, чтобы подтвердить нажатие Ctrl и запустить таймер, затем вы должны также переопределить mouseReleaseEvent, чтобы подтвердить, как долго ctrl нажимается таймером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...