Qt5 QMessageBox无法在按钮之间切换

问题描述 投票:0回答:1

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

EscapeEnter之类的键工作正常,但是TabSpace以及LeftRight键什么也不做。我想要它,因此按这些键会将焦点从一个按钮更改为另一个按钮,或者如果Space将用作Enter


我认为这将是默认行为或易于实现,但我没有看到它。我不希望a)构建自己的ui表单,或b)构建复杂的keyPressEvent函数,但这也许就是我要坚持的目标。

使用Qt 5.3.2,qt-creator 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获得所需的效果,因此我将进行更多测试。它可能特定于我的平台。

qt5 focus keypress osx-snow-leopard qmessagebox
1个回答
0
投票

感谢@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要求对按钮本身有强烈的关注策略才能获得此功能。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.