Qt5 QMessageBox не может переключаться между кнопками - PullRequest
0 голосов
/ 24 марта 2020

У меня есть некоторый код для вызова QMessageBox, но когда он запрашивает, я не могу переключаться между кнопками. Он застрял на кнопке по умолчанию.

Клавиши типа Escape и Enter работают просто отлично, но клавиши Tab, Space и Left и Right ничего не делают. Мне бы хотелось, чтобы нажатие этих клавиш переключало фокус с одной кнопки на другую или, если Space, будет действовать как Enter.


Я подумал, что это будет поведение по умолчанию или просто реализовать, но я его не вижу. Я бы предпочел не а) создавать свою собственную форму пользовательского интерфейса или б) создавать сложную функцию keyPressEvent, но, возможно, это то, с чем я застряну.

Используя Qt 5.3.2, использовались qt-creator 3.1.2 и 3.0.1, Ma c 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);, но это не помогло.

Мне удалось получить желаемый эффект от Qt 5.14.1 + qtcreator 4.10.1 на Linux, поэтому я проведу больше испытаний. Это может быть указано c для моей платформы.

1 Ответ

0 голосов
/ 24 марта 2020

Спасибо @VladimirBershov и ответу на { ссылка } за помощь в преодолении этого.

Ранее я уже вызывал 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();

И это исправит! Ma c OS X 10.6.8 требует строгой политики фокуса на самих кнопках, чтобы получить эту функцию.

...