【问题标题】:How to remove the horizontal line in a QWizard with a stylesheet?如何使用样式表删除 QWizard 中的水平线?
【发布时间】:2019-03-11 02:21:27
【问题描述】:

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

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

这是我的代码(完整的可构建示例可以从 gist 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; }");

我希望有人可以帮助我。

【问题讨论】:

    标签: c++ qt user-interface qwizard


    【解决方案1】:

    要解决此问题,请设置整个应用程序的调色板,而不仅仅是 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,我已经做到了。谢谢你的评论!我很感激。
    • 使用qApp->setStyleSheet,为什么我需要为整个应用程序定义调色板?这条线画在 QWizard 内部。再次感谢您,这是公认的答案。
    猜你喜欢
    • 2019-03-03
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多