Qt5 Q消息框无法在按钮之间制表



我有一些代码可以调出QMessageBox,但当它提示时,我无法在按钮之间切换。它卡在默认按钮上。

EscapeEnter这样的键工作得很好,但TabSpaceLeftRight键什么都不做。我想要它,这样按下这些键可以将焦点从一个按钮更改为另一个按钮,或者如果Space,则将充当Enter


我认为这将是默认行为或实现起来很简单,但我看不到。我宁愿不a(构建自己的ui表单,也不b(构建复杂的keyPressEvent函数,但也许这就是我要坚持的。

使用Qt 5.3.2,使用Qt创建者3.1.2和3.0.1,Mac OS X 10.6.8。

QMessageBox msgBox;
msgBox.setWindowTitle("This is a prompt");
msgBox.setIcon(QMessageBox::Question);
msgBox.layout()->setSizeConstraint(QLayout::SetMaximumSize);
msgBox.setText(tr("This is some text"));
msgBox.setInformativeText(tr("Here is some great information for you.n"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
msgBox.setBaseSize(QSize(400, 160));
msgBox.setFocusPolicy(Qt::StrongFocus);
int ret = msgBox.exec();

我试过使用setFocusPolicy(Qt::StrongFocus);,但没有帮助。

我能够在Linux上从Qt 5.14.1+qtcreator 4.10.1中获得所需的效果,所以我将做更多的测试。它可能特定于我的平台。

感谢@VladimirBershov和https://stackoverflow.com/a/32378759/4149835谢谢你帮我度过难关。

以前我对消息框对象本身调用了setFocusPolicy(Qt::StrongFocus),但现在我这样做了:

QMessageBox msgBox;
msgBox.setWindowTitle("This is a prompt");
msgBox.setIcon(QMessageBox::Question);
msgBox.layout()->setSizeConstraint(QLayout::SetMaximumSize);
msgBox.setText(tr("This is some text"));
msgBox.setInformativeText(tr("Here is some great information for you.n"));
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
msgBox.setDefaultButton(QMessageBox::No);
msgBox.setBaseSize(QSize(400, 160));
QList<QAbstractButton *> bList = msgBox.buttons();
for (int i=0; i<bList.count(); i++)
{
bList.at(i)->setFocusPolicy(Qt::StrongFocus);
}
int ret = msgBox.exec();

这就解决了问题!Mac OS X 10.6.8需要对按钮本身进行强聚焦策略才能获得此功能。

编辑

将焦点策略设置为强焦点确实有效,但这不是Mac OS X的使用方式。我读了一篇博客,提到你需要进入:

System Settings -> Keyboard -> Keyboard Shortcuts tab

然后在底部,应该有一个Full Keyboard Access部分,它使您能够在"one_answers"之间移动键盘选项卡焦点;仅文本框和列表";(默认(,或";所有控件";。设置为All Control意味着QT可以在OS X上正确使用其默认焦点策略。

相关内容

  • 没有找到相关文章

最新更新