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