Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除QWizard中QWizard页面周围的额外空间_C++_Qt_Qt5_Wizard - Fatal编程技术网

C++ 删除QWizard中QWizard页面周围的额外空间

C++ 删除QWizard中QWizard页面周围的额外空间,c++,qt,qt5,wizard,C++,Qt,Qt5,Wizard,我正在用Ubuntu13.10下的Qt5.2.1编写一些向导。我有标题图像,希望在几乎所有向导页面的顶部显示它。所以我打开了qtDesign,创建了新的QWizardPage表单,结果(概念上)如下所示: 顶部的蓝色区域是我的标题图像。它应该占据所有顶部区域,从(0,0)到(window.width,image.height) 然后我只需将此页面添加到QQ向导: SetupWizard::SetupWizard(QWidget * parent) : QWizard(parent) {

我正在用Ubuntu13.10下的Qt5.2.1编写一些向导。我有标题图像,希望在几乎所有向导页面的顶部显示它。所以我打开了qtDesign,创建了新的QWizardPage表单,结果(概念上)如下所示:

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

然后我只需将此页面添加到QQ向导:

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

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


那么,我是否能够使用QWizard显示标题而不使用间距?或者我必须创建自己的向导类?

标题的横幅和徽标可以使用

setPixmap(QWizard::BannerPixmap, bannerPixmap);
setPixmap(QWizard::LogoPixmap, logoPixmap);
但是,向导窗口将不再可以水平调整大小。此外,我还想进一步自定义标题,所以我在QWizardPage中添加了一个自定义标题。这会在页面周围产生白色边框,您也观察到了这一点

在QWizard的构造器中,可以使用此攻击删除边框:

QWidget *flickerWidget = (QWidget *)(children()[0]);
flickerWidget->layout()->setContentsMargins(0, 0, 0, 0);
但这并不实用,因为按钮上方的分隔符也会丢失填充,而且按钮周围也不会有填充

我最后做的是:

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

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

  • 如果按ESC键,向导小部件会自行销毁,因此我将其finished()信号发送到对话框的done()以将其关闭:

connect(MU向导,信号(完成(int)),这个,插槽(完成(int))

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

我还使用了
setWizardStyle(QWizard::ClassicStyle)
,这样向导就可以有适当的背景色/填充,而不必使用本机标题/副标题。现代风格在没有设置标题的情况下会产生奇怪的颜色


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

您是如何更改QWizard的样式的?看看这里的“盒子模型”一章;)通过设置QWizard的样式,我指的是Wizard样式选项,它由setWizardStyle(WizardStyle样式)设置,可以是ClassicStyle、ModernStyle、MacStyle、AeroStyle和NStyles。在QWizard的样式表中将边距和填充设置为0没有帮助。在我看来,您必须检查两个小部件(父母和儿子)的边距和填充,而不仅仅是QWizard。感谢您的想法,但这没有帮助。我曾写道:“边距:0;填充:0;边框:0;”@serg.v.gusev你最终解决了这个问题吗?