用Qt中的指针更改布局内容

Change layout content with pointers in Qt

本文关键字:布局 指针 Qt      更新时间:2023-10-16

是否可以用指针更改布局的内容?

我想做如下的事情。

在标题中:

QWidget* activeView;
QWidget* one;
QWidget* two;
...

在源文件中,我在构造函数中设置了Widgets,并将第一个推送到布局中:

activeView = one;
ui->activeLayout->addWidget(activeView);

稍后使用插槽或方法,我想更改activeView:

activeView = two;

我试过了,但不起作用。我甚至调用了布局的update()方法。

不幸的是,这不会起作用。

你想要的是QStackedWidget。官方文件在这里。

如果你不想使用这个小部件,并且想手动进行,你将不得不在代码中自己重构布局。它可以用一种方法包装,不会太难看。

示例:

void clearLayout(QLayout *layout) 
{
    if (layout) {
        while(layout->count() > 0){
            QLayoutItem *item = layout->takeAt(0);
            delete item->widget();
            delete item;
        }
    }
}
void setNewWidgetVisible(QWidget *activeView)
{
   clearLayout(ui->activeLayout);
   ui->activeLayout->addWidget(activeView);
}