如何在带有样式表的QWizard中删除水平线?

时间:2018-10-05 14:32:36

标签: c++ qt user-interface qwizard

我正在处理QWizard的样式表,我想删除按钮上方的水平线。

我已经发布了一个最小示例here,scopchanov从最小示例中解决了这个问题,但是我的项目中有一些代码行避免了该解决方案的工作,所以我发布了另一个问题在这里。

Screenshot

这是我的代码(完整的可构建示例可以从要旨here 下载):

licensewizard.h

#include <QWizard>

class LicenseWizard : public QWizard {
  Q_OBJECT
public:
  LicenseWizard(QWidget *parent = 0);
};

licensewizard.cpp

#include <QApplication>
#include <QtWidgets>
#include "licensewizard.h"

LicenseWizard::LicenseWizard(QWidget *parent) : QWizard(parent) {
    setWizardStyle(ModernStyle);

    // solution from @scopchanov https://stackoverflow.com/a/52541248/8570451
    QPalette p(palette());
    p.setColor(QPalette::Mid, p.color(QPalette::Base));
    setPalette(p);
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // this line breaks @scopchanov solution.
    // replace QLabel by QPushButton, or anything else... still broken.
    qApp->setStyleSheet("QLabel { color:black; }");

    LicenseWizard wizard;
    wizard.show();

    return app.exec();
}

正如scopchanov所说,我使用了QPalette技巧。但是我在qApp上定义了一个很大的样式表,这就是造成我问题的原因。使用很小的样式会遇到相同的问题。

要重现的步骤是在声明QApplication之后添加以下行:

qApp->setStyleSheet("QLabel { color:black; }");

我希望有人能帮助我。

1 个答案:

答案 0 :(得分:2)

要解决此问题,请设置整个应用程序的调色板,而不仅仅是LicenseWizard类,如下所示:

LicenseWizard::LicenseWizard(QWidget *parent) : QWizard(parent) {
    setWizardStyle(ModernStyle);
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    QPalette p(qApp->palette());

    p.setColor(QPalette::Mid, p.color(QPalette::Base));
    qApp->setPalette(p);
    qApp->setStyleSheet("QLabel { color:black; }");

    LicenseWizard wizard;
    wizard.show();

    return app.exec();
}

注意:正如我在链接问题中的回答所述,如果此颜色角色被其他任何项目使用,则其颜色也会受到影响。