gpt4 book ai didi

c++ - 如何去除 QWizard 中的横线?

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:04 25 4
gpt4 key购买 nike

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

Screenshot

我试图递归浏览所有的小部件并将它们的边框设置为无,但似乎没有一个小部件有这个边框。

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

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 inherits 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 的实现给出了如何做到这一点的想法,即通过设置 color role用于将线条 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 page without a horizontal ruler

关于c++ - 如何去除 QWizard 中的横线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com