У меня есть приложение 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, но ожидались битовые флаги, указывающие, какие клавиши были нажаты.





Я думаю, вы склонны реализовывать функцию, которая будет запускаться при достаточном нажатии Ctrl.
Вы можете переопределить mousePressEvent, чтобы подтвердить нажатие Ctrl и запустить таймер, затем вы также должны переопределить mouseReleaseEvent, чтобы подтвердить, как долго таймер нажимал Ctrl.
Используйте 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";
}
Это сделало именно то, что мне было нужно. Спасибо!
@eyllanesc: обработка событий — это только один из способов обработки состояния клавиатуры.