我目前正在尝试为我正在开发的 Python/Qt 应用程序实现一个简单的“第一步”向导。使用 Designer 很容易做到这一点,但像往常一样,魔鬼在于细节。我的问题是“标题”字段对我来说太大了(大约 50% 的可用屏幕空间)。这是一个屏幕截图,还有*.ui 文件。
我已经查看了所有 QWizard/QWizardPage 属性,但找不到任何与“标题”字段的大小/样式相关的内容。有什么方法可以做到这一点(也许使用自定义样式表?)还是我不走运?
标题标签位于内部QGridLayout
,除非您向页面添加布局(或将页面的垂直大小策略显式设置为MinimumExpanding
或Expanding
)以强制包含页面的网格单元格展开,否则标题将始终占 50%的总高度。
如果设置了像素图,就像QWizard::WatermarkPixmap
上的一样QWizard::ModernStyle
,无论如何都会锁定高度。
要解决此问题,请使用setSideWidget()
.
在您的子类的构造函数中QWizard
this->setWizardStyle(QWizard::ModernStyle);
// setPixmap(QWizard::WatermarkPixmap, QPixmap(":/watermark.gif"));
QWidget * sideWidget = new QWidget();
QGridLayout * gridLayout = new QGridLayout();
QLabel * label = new QLabel();
label->setPixmap(QPixmap(":/watermark.gif"));
sideWidget->setLayout(gridLayout);
gridLayout->addWidget(label);
this->setSideWidget(sideWidget);
//this->setSizePolicy(QSizePolicy::MinimumExpanding ,QSizePolicy::MinimumExpanding );
最后,要使标题框在字体大小更改时进行调整,最简单的技巧是调整像素图的高度并将其设置在 QWizard::LogoPixmap 中。
int numOfLinesInTitleBox = 2;
QPixmap p(1,this->fontMetrics().height()*numOfLinesInTitleBox);
p.fill(Qt::transparent);
setPixmap(QWizard::LogoPixmap, p);
this->adjustSize();
希望有帮助。