Je travaille sur la feuille de style d'un QWizard et j'aimerais supprimer la ligne horizontale juste au-dessus du bouton poussoir.

J'ai déjà posté un exemple minimal ici, la question a été résolue par scopchanov à partir de l'exemple minimal, mais j'ai quelques lignes de code dans mon projet qui évite que la solution fonctionne, je poste donc une autre question ici.

Screenshot

Voici mon code (l'exemple constructible complet peut être téléchargé à partir de l'essentiel ici< /em>):

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

Comme l'a dit scopchanov, j'ai utilisé l'astuce QPalette. Mais j'ai une grosse feuille de style définie sur le qApp et c'est la cause de mon problème. L'utilisation d'un style très petit donne le même problème.

L'étape à reproduire est d'ajouter cette ligne après la déclaration du QApplication :

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

J'espère que quelqu'un pourrait m'aider.

3
matt 5 oct. 2018 à 17:32

1 réponse

Meilleure réponse

Pour résoudre ce problème, définissez la palette de l'ensemble de l'application, au lieu de simplement la classe LicenseWizard, comme ceci :

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

Remarque : Comme mentionné dans ma réponse à la question liée, si ce rôle de couleur est utilisé par un autre élément, sa couleur serait également affectée.

2
scopchanov 6 oct. 2018 à 03:05