工作中遇到这样一个问题:
在代码中创建了一个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);
发现显示出来是空的
我以为是没有添加成功,于是查看了一下当前的page和button的parent:

发现确实显示的是我的page,button也确实被加进去了,于是我又查看了一下button是否可见,发现是false,于是加了一句button->show();它居然神奇的显示了出来

然而我也没弄清楚为什么button会被隐藏,而且我调用了show之后判断isVisible竟然还是false。。。
总之看来把已经加入QStackedWidget的某一页重新加到另一页时,需要调用一下show,否则就看不到,代码供大家参考:


QStackedWidget addWidget后不居中问题解决
2974





