如何将标签置于 QWizardPage 的中心?

How can I center a label in the center of a QWizardPage?

我有一个标签:

self.label = QtLabel(self)

在 VBoxLayout 内部。

我想设置在 QWizardPage 的中心,无论 window 变成什么大小。我设法让它水平居中:

self.label.setAlignment(QtCore.Qt.AlignCenter)  

但我似乎也无法使其垂直居中。我试过了

self.label.setAlignment(QtCore.Qt.AlignVCenter)

和:

self.label.setAlignment(QtCore.Qt.AlignCenter | AlignVCenter)  

还有其他一些我现在不记得的事情(如果我记得我会编辑)。阅读 this answer 后,问题似乎与设置最小和最大大小有关。我试过了,将 MinimumHeight 和 MaximumHeight 设置为 200。这大致使标签居中,但它不适应 window 高度的变化,仅适应其宽度。

如何让这个标签直接在我的页面中间居中?

在两个间隔项之间添加您的标签。您的垂直布局也应该在其父窗口小部件中进行布局,以便它占据父窗口的完整尺寸。

QSpacerItem* verticalSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
label = new QLabel(Form);
label->setAlignment(Qt::AlignCenter);
QSpacerItem* verticalSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);

verticalLayout->addItem(verticalSpacer1);
verticalLayout->addWidget(label);
verticalLayout->addItem(verticalSpacer2);

如果您不想设置最小尺寸政策,您可以使用 QWidgets 来做这样的事情:

QWizardPage.__init__(self)

    intro_text = "Some text that needs to be centered..."

    self.introVBox = QVBoxLayout(self)

    self.sizer_top = QWidget()
    self.sizer_top.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
    self.sizer_bottom = QWidget()
    self.sizer_bottom.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    self.label = QLabel(self)
    self.label.setText(intro_text)
    self.label.setAlignment(QtCore.Qt.AlignCenter)
    self.introVBox.addWidget(self.sizer_top)
    self.introVBox.addWidget(self.label)
    self.introVBox.addWidget(self.sizer_bottom)
    self.setLayout(self.introVBox);