我有一个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,但希望看到位标记指示按下了哪些键。
答案 0 :(得分:1)
使用QApplication::queryKeyboardModifiers()
代替QApplication::keyboardModifiers()
。
有关更多详细信息,请参见docs。
示例:
Qt::KeyboardModifiers key = QApplication::queryKeyboardModifiers();
if(key == Qt::ShiftModifier){
qDebug() << "Shift key is pressed";
}
if(key == Qt::ControlModifier){
qDebug() << "Ctrl key is pressed";
}
答案 1 :(得分:-1)
我认为您倾向于实现一个功能,该功能将在按下Ctrl键足够长的时间后运行。 您可以覆盖mousePressEvent来确认按下Ctrl键并启动一个计时器,然后您还应该覆盖mouseReleaseEvent来确认计时器按下ctrl多长时间。