QT C++ 如何向stacked widget第5个页面动态添加可见QLabel控件
解决方法
Stacked Widget的页面索引默认从0开始计数,你要的第5页对应索引为4,你只需要将你创建的QLabel的父对象设置为第5页的窗口实例即可,具体操作分两种常见场景:
场景1:你通过Qt Designer创建Stacked Widget,第5页对象名为page5
直接修改你原有代码中QLabel的父对象参数即可,修改后完整代码如下:
// 将父对象从this改为目标页page5即可 QLabel *label = new QLabel(ui->page5); label->setFrameStyle(QFrame::Panel | QFrame::Sunken); label->setText("first line\nsecond line"); label->setAlignment(Qt::AlignBottom | Qt::AlignRight); label->setGeometry(QRect(10,10,30,80)); // 保险起见可以主动调用show,父控件显示时子控件默认也会显示 label->show();
场景2:你动态创建Stacked Widget,没有提前定义page5的对象名
先通过索引获取第5页的实例指针,再将其设为QLabel的父对象:
// 先获取第5页的指针对象,索引填4不要填5 QWidget *targetPage = ui->stackedWidget->widget(4); QLabel *label = new QLabel(targetPage); label->setFrameStyle(QFrame::Panel | QFrame::Sunken); label->setText("first line\nsecond line"); label->setAlignment(Qt::AlignBottom | Qt::AlignRight); label->setGeometry(QRect(10,10,30,80)); label->show();
常见注意事项
- 如果你给page5设置了布局管理器,
setGeometry的绝对定位参数会失效,这种情况下你可以将QLabel添加到布局中:ui->page5->layout()->addWidget(label); - Stacked Widget只会显示当前激活的页面,你可以调用
ui->stackedWidget->setCurrentIndex(4)切换到第5页验证显示效果 - 不要填错索引值,如果索引超出Stacked Widget的页面总数,
widget()方法会返回空指针,引发程序崩溃
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

