Как удалить горизонтальную линию в QWizard с помощью таблицы стилей? - PullRequest
0 голосов
/ 05 октября 2018

Я работаю над таблицей стилей 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();
}

Как сказал Скопчанов, я использовал трюк QPalette.Но у меня есть большая таблица стилей, определенная в qApp, и это является причиной моей проблемы.Использование очень маленького стиля создает ту же проблему.

Шаг для воспроизведения - добавить эту строку после объявления QApplication:

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

Я надеюсь, что кто-то может мне помочь.

1 Ответ

0 голосов
/ 05 октября 2018

Чтобы исправить это, установите палитру всего приложения, а не просто класс 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();
}

Примечание: Как упоминалось в моем ответе насвязанный вопрос: если эта цветовая роль используется каким-либо другим элементом, это также повлияет на его цвет.

...