使用冲突的访问键和快捷键在Qt4和Qt5之间切换

时间:2015-07-27 19:12:59

标签: c++ windows qt qt4 qt5

处理菜单栏菜单访问键和具有冲突键组合的Q​​Action快捷键时,QT4和QT5之间会发生变化。

在Qt4中,当MenuBar包含一个带&符号&文件的菜单时,可以通过点击Alt然后点击F来打开它。如果使用相同的热键组合(如Alt + F)创建QAction,那么QAction的如果同时按下Alt和F或按住alt并按下F,则会触发信号 这与Visual Studios和其他MS程序的功能类似。

在Qt5.4和Qt5.5中,当MenuBar包含一个带&符号&文件的菜单时,可以通过点击Alt然后点击F来打开它。如果使用相同的热键组合(如Alt +)创建QAction F然后QAction的信号不会被触发。相反,没有任何反应,并且会向应用程序输出发送警告消息。

QAction :: eventFilter:不明确的快捷方式重载:Alt + F

可以使用菜单等QTcreator示例复制此问题,并将newAct的setshortcut更改为Alt + F或其他与菜单栏相同的快捷键。

fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);

void MainWindow::createActions()
{
    newAct = new QAction(tr("&New"), this);
    newAct->setShortcut(tr("Alt+F"));  // This will work in QT4 but not in QT5 and will send a message QAction::eventFilter: Ambiguous shortcut overload: Alt+F
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));

我的问题是Windows QT4或Qt5的正确功能是什么。如果QT5是正确的,有一种设置Qt的方法,所以它的作用就像QT4。

1 个答案:

答案 0 :(得分:0)

TL; DR:不要讨厌你的用户。不要那样做。

应用程序 - 全局密钥快捷方式必须明确。 Qt5的行为是正确的。 Qt4未能检测到这一点,并且会让你误导用户。当用户看到菜单或菜单项的下划线键盘快捷键时,他们完全相信快捷键是应用程序全局的,并且不依赖于上下文。您在Qt 4中观察到的是“允许”,但从可用性的角度来看非常糟糕,并且在抛光的专业应用程序中没有任何地位。

要获得您所追求的行为,您必须明确地执行操作:您必须从菜单操作中删除快捷方式。这将正常工作:菜单丢失快捷方式,您的应用程序全局快捷方式将接管该键序列。

唉,我非常怀疑接管非常常用菜单快捷方式是个好主意 - 大多数Windows应用程序中都有一个菜单快捷方式。如果我是你的用户,我会喜欢你接管Alt-F。