gpt4 book ai didi

c++ - 删除 QWizard 内部 QWizardPage 周围的多余空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:06 24 4
gpt4 key购买 nike

我正在 Ubuntu 13.10 下使用 Qt 5.2.1 编写一些向导。我有标题图片,想在几乎所有向导页面的顶部显示它。所以我打开了 QtDesigned,创建了新的 QWizardPage 表单,结果看起来像(概念上):

QWizardPage in QtDesigner

顶部的蓝色区域是我的标题图片。它应该占据所有顶部区域,从 (0,0) 到 (window.width, image.height)。

然后我将这个页面添加到 QWizard:

SetupWizard::SetupWizard(QWidget * parent) : QWizard(parent) {
welcomePage_ = new SetupWizardWelcomePage(this);
setPage(WELCOME_PAGE, welcomePage_);
...

结果是:

QWizardPage in running app

如您所见,我的标题图片的左侧、右侧和顶部都有小边距。我试图改变 QWizard 的样式,设置固定大小并玩弄几何图形 - 没有任何帮助。似乎这个间距是在 QWizard 类中定义的,但我不确定。

那么我可以使用 QWizard 显示没有间距的标题吗?或者我必须创建自己的向导类?

最佳答案

页眉的横幅和标志可以使用

setPixmap(QWizard::BannerPixmap, bannerPixmap);
setPixmap(QWizard::LogoPixmap, logoPixmap);

但是,向导窗口将不再可以水平调整大小。另外,我更想自定义标题,所以我向 QWizardPage 添加了一个自定义标题。这会在您也观察到的页面周围产生白色边框。

可以在 QWizard 的构造函数中使用这个 hack 来删除边框:

QWidget *flickerWidget = (QWidget *)(children()[0]);
flickerWidget->layout()->setContentsMargins(0, 0, 0, 0);

但这并不实用,因为按钮上方的分隔符也会丢失内边距,而且按钮周围也没有内边距。

我最后做的是:

  • 使用 QVBoxLayout 布局创建了一个继承自 QDialog 的新小部件,我在其中放置了自定义标题小部件 + QWizard 实例。

  • 连接到向导的 currentIdChanged(int) 信号并更新信号处理程序中的自定义 header 的标题和副标题。

  • 如果按下 ESC,向导小部件会自行销毁,所以我将它的 finished() 信号路由到我的对话框的 done() 以关闭它:

connect(m_wizard, SIGNAL(finished(int)), this, SLOT(done(int)));

可选: 我还制作了 QWizardPage 的自定义子类,在其中覆盖了 setTitle 和 setSubTitle 并且没有调用父级的子类,因此原始 header 将不可见。在 currentIdChanged() 处理程序中,我查询页面子类的标题/副标题并将其设置在自定义 header 中。

我还使用了 setWizardStyle(QWizard::ClassicStyle) 因此向导将具有适当的背景颜色/填充,而无需其原生标题/副标题。未设置标题时,ModernStyle 过去常常产生奇怪的颜色。

它最终会起作用,但也许从头开始创建向导会更容易。

关于c++ - 删除 QWizard 内部 QWizardPage 周围的多余空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576337/

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