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

How to see keyboard modifiers when program launched from windows?

本文关键字:键盘 何查看 窗口 启动 程序      更新时间:2023-10-16

我有一个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,但需要指示按住哪些键的位标志。

使用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";
}

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