如何使用样式表在QWizard中移除水平线?

3
我正在处理一个QWizard的样式表,我想删除按钮上方的水平线。
我已经发布了一个最小示例这里,问题已经在最小示例中得到解决,但是我的项目中有一些代码行阻止了解决方案的工作,因此我在这里发布另一个问题。

Screenshot

这是我的代码(完整可构建示例可以从此处的gist 下载):

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个回答

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();
}

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


那不会影响其他小部件吗? - eyllanesc
1
因此,我建议在您的问题中将其作为警告放置。指出答案的限制总是很好的做法。 - eyllanesc
2
我建议将它放在这里,我向您保证很少有人会查看您的链接问题。 - eyllanesc
1
@eyllanesc,我已经完成了。感谢您的提醒!我非常感激。 - scopchanov
1
使用qApp->setStyleSheet,为什么需要为整个应用程序定义调色板?该行在QWizard内部绘制。 再次感谢您,这是被接受的答案。 - matt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接