QDialogBu​​ttonBox中"应用"按钮的位置

tun*_*ung 6 qt

我想QDialogButtonBox按照这个特定的顺序有三个按钮:

Ok | Apply | Cancel
Run Code Online (Sandbox Code Playgroud)

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

Mee*_*fte 8

按钮布局是特定于平台的.

Windows - Ok | Cancel | Apply
OS X - Apply | Cancel | Ok
KDE - Ok | Apply | Cancel
GNOME - Apply | Cancel | Ok
Run Code Online (Sandbox Code Playgroud)

强制使用非标准布局有两种方法.

您可以子类化QProxyStyle并重新实现styleHint方法,为QStyle::SH_DialogButtonLayoutstyleHint 提供自定义样式.

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

然后将自定义样式应用于应用程

qApp->setStyle(new KdeStyle());
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用样式表.button-layout属性指定a QDialogButtonBox或a 中按钮的布局QMessageBox.可能的值为0(WinLayout),1(MacLayout),2(KdeLayout)和3(GnomeLayout).

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