我有一个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 的时间。