C++ 如何在QQ向导中删除水平线?

C++ 如何在QQ向导中删除水平线?,c++,qt,user-interface,qwizard,C++,Qt,User Interface,Qwizard,我正在处理QWizard的样式表,我想删除按钮上方的水平线: 我曾尝试递归浏览所有小部件,并将其边框设置为“无”,但似乎没有任何小部件具有此边框 以下是我的代码(可以找到完整的可构建示例): licensewizard.h \ifndef许可证向导\u H #定义许可证向导 #包括 类许可证向导:公共QQ向导 { Q_对象 公众: 枚举 { 欢迎光临 }; 许可证向导(QWidget*parent=0); }; 类WelcomePage:公共QWizardPage { Q_对象 公众: Wel

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

我曾尝试递归浏览所有小部件,并将其边框设置为“无”,但似乎没有任何小部件具有此边框

以下是我的代码(可以找到完整的可构建示例):

licensewizard.h

\ifndef许可证向导\u H
#定义许可证向导
#包括
类许可证向导:公共QQ向导
{
Q_对象
公众:
枚举
{
欢迎光临
};
许可证向导(QWidget*parent=0);
};
类WelcomePage:公共QWizardPage
{
Q_对象
公众:
WelcomePage(QWidget*parent=0);
};
#恩迪夫
licensewizard.cpp

#包括
#包括“licensewizard.h”
#包括
LicenseWizard::LicenseWizard(QWidget*父项)
:QWizard(父级)
{
setPage(欢迎页面,新欢迎页面);
setStartId(欢迎使用第页);
设置向导样式(ModernStyle);
setWindowTitle(tr(“许可证向导”);
对于(自动*小部件:this->findChildren())
{
小部件->设置样式表(“背景:无;边框:无;边距:0;填充:0;”);
}
}
WelcomePage::WelcomePage(QWidget*父项)
:QWizardPage(父级)
{
片名(tr(“欢迎”);
}
有可能吗?怎么可能?

原因 此标尺不受样式表的影响,因为和线是在中绘制的:

解决方案 既然这把尺子拿不开,我建议你把它藏起来

QWizardHeader::paintEvent
的实现给出了如何实现这一点的想法,即通过将用于绘制线条的
Qpalete::Mid
设置为适当的颜色,该颜色与背景相混合,
Qpalete::Base

注意:如果此颜色角色被任何其他项目使用,其颜色也会受到影响

例子 以下是我为您准备的一个示例,说明如何实施建议的解决方案:

替代品

for (auto *widget : this->findChildren<QWidget *>())
{
    widget->setStyleSheet("background:none; border:none; margin:0; padding:0;");
}
结果 给定的示例产生以下结果:


一个最简单的例子是,在一个.cpp文件中,使用Java风格的类(没有单独的方法定义)的行数不到一半,并且很适合这个问题,可能没有滚动条:)。我建议你这样做,这将使它更容易复制——因此,在你需要大量样板的情况下,问题不是企业级的怪物。谢谢你提供了这个有用的答案。它在最简单的示例中工作得很好,但我不明白为什么它在我的原始代码中不工作。我试图禁用所有样式表,但它没有改变任何东西。还有一条很细的线。还有什么我必须检查的吗?@matt,如原因中所述,这一行不受影响,即无法通过设置样式表删除,因为绘图是在paint事件处理程序中硬编码的。这意味着,无论使用什么样式表,都不能删除它。但是你可以在修改小部件的调色板时隐藏它。@matt,因为它可以工作,所以你可以将答案标记为已接受。此外,如果你喜欢它,你可能会考虑投票,一旦你达到15的声誉或更多。是的,我明白。修改调色板在我的原始代码中没有效果:(但给出的示例接受了答案。@原始代码是什么意思?我已使用您的代码创建了示例。
#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"));
}
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);
}
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);