首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除QWizard中的水平线?

如何删除QWizard中的水平线?
EN

Stack Overflow用户
提问于 2018-09-27 13:52:28
回答 1查看 308关注 0票数 2

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

我尝试递归浏览所有小部件,并将其边框设置为none,但似乎没有一个小部件具有此边框。

下面是我的代码(完整的可构建示例可以找到https://gist.github.com/ardeidae/e303661586712152ef9f6a892432d45e):

licensewizard.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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"));
}

有可能吗?怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-27 16:18:06

原因

这个标尺QWizardRuler *bottomRuler不受样式表的影响,因为QWizardHeader和线条是在QWizardHeader::paintEvent中绘制的。

代码语言:javascript
复制
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混合的适当颜色。

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

示例

下面是我为您准备的一个如何实现所提议的解决方案的示例:

替身

代码语言:javascript
复制
for (auto *widget : this->findChildren<QWidget *>())
{
    widget->setStyleSheet("background:none; border:none; margin:0; padding:0;");
}

使用

代码语言:javascript
复制
QPalette p(palette());

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

setPalette(p);

结果

给定的示例产生以下结果:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52538669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档