Как поменять местами кнопки «Отмена» и «ОК» в виджете QInputDialog?

Следующий код отображает диалоговое окно ввода с кнопкой «Отмена» слева и кнопкой «ОК» справа. Как поменять местами кнопки?

QInputDialog::getText(this, QString("Email"), QString("Enter email address:"), QLineEdit::Normal, QString(""), &ok, 0);

person Talespin_Kit    schedule 07.04.2015    source источник


Ответы (1)


Когда дело доходит до порядка кнопок, Qt следует соглашению среды, в которой он работает, т. е. Ok/Cancel в Windows, KDE и т. д. и Cancel/OK в OS X, Gnome и т. д. не должен удивлять пользователя порядком кнопок, отличным от стандартного для платформы.

Однако, если у вас есть веская причина переопределить платформу по умолчанию (я не могу придумать ни одной) или если вы, например. на встроенной платформе, где нет платформы по умолчанию, вам необходимо переопределить то, что определяет используемый QStyle.

Реализуйте свой собственный прокси-стиль, переопределяя значение, возвращаемое для QStyle::SH_DialogButtonLayout:

int ProxyStyle::styleHint(StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const override {
   if (hint == SH_DialogButtonLayout) {
       return QDialogButtonBox::WinLayout;
   }
   return baseStyle()->styleHint(hint, option, widget, returnData);
}
person Frank Osterfeld    schedule 07.04.2015