关于QStackedWidget addWidget后不居中的问题

工作中遇到这样一个问题:

在代码中创建了一个Widget,然后调用QStackedWidget的addWidget方法把它加成一页,虽然能显示出来但由于这个Widget是固定大小,它会出现在整个窗口的左上角,如图所示(我自己写了一个小的测试工程来调试):

出现这种现象的原因是,这个Widget本身被当做了QStackedWidget的一页,而通常我们在QtDesigner中插入一个Widget都是先插入一页Page,然后再把这个Widget放入Page,通过这个Page的布局我们就可以让插入的Widget自适应了
那么现在的问题是,我们没法在QtDesigner中插入我们的Widget,它已经被addWidget调用成为了当中的一页,该怎么让它居中呢?我的解决方法还是让它插入某个带有Layout的Page让它自适应,所以我尝试了如下代码:

auto button = new QPushButton(this);
button->setFixedSize(20, 20);
ui->stackedWidget->addWidget(button);
ui->page->layout()->addWidget(button);

发现显示出来是空的

方法如下: 可以使用QVBoxLayout和setAlignment函数将QStackedWidget居中。 具体的代码如下: ```python import sys from PyQt5 import QtWidgets class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() # 创建QStackedWidget self.stack_widget = QtWidgets.QStackedWidget(self) # 添加需要的子窗口(这里添加两个) self.widget1 = QtWidgets.QWidget(self) self.widget2 = QtWidgets.QWidget(self) self.stack_widget.addWidget(self.widget1) self.stack_widget.addWidget(self.widget2) # 创建QVBoxLayout vbox = QtWidgets.QVBoxLayout() vbox.addWidget(self.stack_widget) # 将stackWidget放在窗口的中央 central_widget = QtWidgets.QWidget() central_widget.setLayout(vbox) self.setCentralWidget(central_widget) # 设置窗口的大小和标题 self.resize(300, 200) self.setWindowTitle('QStackedWidget居中示例') def changePage(self, index): # 切换子窗口 self.stack_widget.setCurrentIndex(index) if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 这个示例中创建了一个窗口,并在其中添加了QStackedWidget作为子窗口,并将QStackedWidget居中显示。同时,还在函数changePage中添加了切换子窗口的功能。 当然,如果你想在QT Designer中设置QStackedWidget在窗口的居中位置,可以使用垂直布局的方式,并将QStackedWidget插入到垂直布局中,然后在布局上右键,选择“布局对齐”,选择“居中对齐”即可。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值