我希望QDialogButtonBox
有三个按钮,按此特定顺序排列:
Ok | Apply | Cancel
是否可以重新排序按钮以将Apply
放在中心?
答案 0 :(得分:6)
按钮布局是特定于平台的。
Windows - Ok | Cancel | Apply
OS X - Apply | Cancel | Ok
KDE - Ok | Apply | Cancel
GNOME - Apply | Cancel | Ok
强制使用非标准布局有两种方法。
您可以继承QProxyStyle
并重新实现styleHint方法,为QStyle::SH_DialogButtonLayout
styleHint提供自定义样式。
class KdeStyle : public QProxyStyle
{
public:
virtual int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const override
{
if (stylehint == SH_DialogButtonLayout)
return QDialogButtonBox::KdeLayout;
return QProxyStyle::styleHint(stylehint, opt, widget, returnData);
}
};
然后将自定义样式应用于应用程序。
qApp->setStyle(new KdeStyle());
另一种方法是使用样式表。 button-layout属性指定QDialogButtonBox
或QMessageBox
中按钮的布局。可能的值为0(WinLayout
),1(MacLayout
),2(KdeLayout
)和3(GnomeLayout
)。
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel);
buttonBox->setStyleSheet("* { button-layout: 2 }");