Я работаю над таблицей стилей 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"));
}
Возможно ли это и как?
Этот правитель, 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);
Данный пример дает следующий результат:
Других решений пока нет …