Как убрать горизонтальную линию в QWizard?

Я работаю над таблицей стилей QWizard и я хотел бы удалить горизонтальную линию чуть выше кнопок:

Скриншот

Я попытался рекурсивно просмотреть все виджеты и установить для их границы значение none, но ни один виджет, кажется, не имеет этой границы.

Вот мой код (полный сборочный пример можно найти Вот):

licensewizard.h

#ifndef LICENSEWIZARD_H
#define LICENSEWIZARD_H

#include <QWizard>

class LicenseWizard : public QWizard
{
Q_OBJECT

public:
enum
{
Page_Welcome
};
LicenseWizard(QWidget *parent = 0);
};

class WelcomePage : public QWizardPage
{
Q_OBJECT

public:
WelcomePage(QWidget *parent = 0);
};

#endif

licensewizard.cpp

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

LicenseWizard::LicenseWizard(QWidget *parent)
: QWizard(parent)
{
setPage(Page_Welcome, new WelcomePage);
setStartId(Page_Welcome);
setWizardStyle(ModernStyle);
setWindowTitle(tr("License Wizard"));

for (auto *widget : this->findChildren<QWidget *>())
{
widget->setStyleSheet("background:none; border:none; margin:0; padding:0;");
}
}

WelcomePage::WelcomePage(QWidget *parent)
: QWizardPage(parent)
{
setTitle(tr("Welcome"));
}

Возможно ли это и как?

2

Решение

Этот правитель, QWizardRuler *bottomRuler, не зависит от таблицы стилей, потому что QWizardRuler наследуется QWizardHeader и линия проводится в QWizardHeader::paintEvent:

void QWizardHeader::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
painter.drawPixmap(0, 0, bannerPixmap);
int x = width() - 2;
int y = height() - 2;
const QPalette &pal = palette();
painter.setPen(pal.mid().color());
painter.drawLine(0, y, x, y);
painter.setPen(pal.base().color());
painter.drawPoint(x + 1, y);
painter.drawLine(0, y + 1, x + 1, y + 1);
}

Так как этот правитель не может быть удален, я бы посоветовал вам скрыть это.

Реализация QWizardHeader::paintEvent дает представление о том, как это сделать, то есть путем установки цветовая роль рисовал линию, QPalette::Mid, чтобы соответствующий цвет, который сочетается с фоном, QPalette::Base,

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

Вот пример, который я подготовил для вас, как предложенное решение может быть реализовано:

Замена

for (auto *widget : this->findChildren<QWidget *>())
{
widget->setStyleSheet("background:none; border:none; margin:0; padding:0;");
}

с

QPalette p(palette());

p.setColor(QPalette::Mid, p.color(QPalette::Base));

setPalette(p);

Данный пример дает следующий результат:

Страница QWizard без горизонтальной линейки

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]