如何交换 QInputDialog 小部件上的 "Cancel" 和 "Ok" 按钮?

How to swap the "Cancel" and "Ok" button on QInputDialog widget?

以下代码显示输入对话框,左侧为 "cancel" 按钮,右侧为 "Ok" 按钮。如何交换按钮的位置?

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

当涉及到按钮顺序时,Qt 遵循其所在环境的约定 运行,即 Ok/Cancel on Windows、KDE ​​等,以及 Cancel/OK 在 OS X、Gnome 等上。这通常是一件好事,不应该用平台默认设置以外的按钮顺序让用户感到惊讶。

但是,如果您有充分的理由覆盖平台默认值(我想不出任何理由),或者如果您是在没有平台默认值的嵌入式平台上,您需要覆盖使用的 QStyle 定义的内容。

实现你自己的proxy style, overriding the value returned for 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);
}