QDialogBu​​ttonBox中“应用”按钮的位置

时间:2016-03-10 02:13:40

标签: qt

我希望QDialogButtonBox有三个按钮,按此特定顺序排列:

Ok | Apply | Cancel

是否可以重新排序按钮以将Apply放在中心?

1 个答案:

答案 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属性指定QDialogButtonBoxQMessageBox中按钮的布局。可能的值为0(WinLayout),1(MacLayout),2(KdeLayout)和3(GnomeLayout)。

QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel);
buttonBox->setStyleSheet("* { button-layout: 2 }");