我有一个标签:
self.label = QtLabel(self)
位于VBoxLayout内部。
我想设置在QWizardPage的中心,无论窗口的大小是多少。我设法让它水平居中:
self.label.setAlignment(QtCore.Qt.AlignCenter)
但我似乎无法让它垂直居中。我试过了
self.label.setAlignment(QtCore.Qt.AlignVCenter)
和:
self.label.setAlignment(QtCore.Qt.AlignCenter | AlignVCenter)
以及其他一些我现在都记不住的事情(如果我这样做,我会编辑)。阅读this answer后,问题似乎与设置最小和最大尺寸有关。我尝试过,将MinimumHeight和MaximumHeight设置为200
。这大致以标签为中心,但它不适应窗户高度的变化,只适应其宽度。
如何将此标签直接放在页面中间?
答案 0 :(得分:1)
在两个垫片之间添加标签。您的垂直布局也应该在其父窗口小部件中布局,因此它需要父级的完整大小。
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);
答案 1 :(得分:1)
如果您不想设置最小尺寸政策,可以使用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);