我在Ubuntu 13.10下使用Qt 5.2.1编写了一些向导。我有标题图像,并希望在几乎所有向导页面的顶部显示它。所以我打开了QtDesigned,创建了新的QWizardPage表单,结果看起来像(概念上):
顶部的蓝色区域是我的标题图片。它应该占据所有顶部区域,从(0,0)到(window.width,image.height)。
然后我将此页面添加到QWizard:
SetupWizard::SetupWizard(QWidget * parent) : QWizard(parent) {
welcomePage_ = new SetupWizardWelcomePage(this);
setPage(WELCOME_PAGE, welcomePage_);
...
结果是:
正如您所看到的,我的标题图片左侧,右侧和顶部的边距很小。我试图改变QWizard的样式,设置固定大小和玩几何 - 没有什么可以帮助我。看起来这个间距是在QWizard类中定义的,但是我不确定它。
所以我能使用QWizard显示没有间距的标题吗?或者我必须创建自己的Wizard类?
答案 0 :(得分:1)
可以使用
设置标题的横幅和徽标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)信号,并在信号处理程序中更新自定义标题的标题和副标题。
如果按下了ESC,向导窗口小部件会自行销毁,所以我将它的完成()信号路由到我的对话框已完成()以关闭它:
connect(m_wizard, SIGNAL(finished(int)), this, SLOT(done(int)));
可选:我还制作了QWizardPage的自定义子类,其中我重写了setTitle和setSubTitle,并且没有调用父类的子类,因此原始标题不可见。在currentIdChanged()处理程序中,我查询了标题/副标题的页面子类,并将其设置在自定义标题中。
我还使用了setWizardStyle(QWizard::ClassicStyle)
,因此向导将具有适当的背景颜色/填充,而没有它的原生标题/副标题。当标题没有设置时,ModernStyle用于产生奇怪的颜色。
最终可行,但也许从头开始创建向导会更容易。