将布局移动到 Qt5 中的另一个布局

Move layout to another layout in Qt5

我在 Qt5 中有一个自定义容器小部件,它有一个没有布局的 QFrame。我在 QFrame 上使用 setLayout 效果很好,但有时我想将包含小部件和其他布局的现有布局传输到该 QFrame 作为布局。在 Qt5 中甚至可以传输已经使用 addLayout 添加的布局吗?

没问题。只需使用 setLayout() 使布局成为目标小部件的布局。包含的小部件将自动重新设置父级。

void MainWindow::moveLayout()
{
    // Move the layout from ui->g0 to ui->g1 and vice versa
    // every time you call moveLayout
    static int toggle = 0;

    QLayout* l;
    QWidget* w;
    if (toggle == 0)
    {
        l = ui->g0->layout();
        w = ui->g1;
    }
    else
    {
        l = ui->g1->layout();
        w = ui->g0;
    }

    if (w->layout())
    { 
        // Hack to clean target widget
        QWidget z;
        z.setLayout(w->layout());
    }

    w->setLayout(l);
    toggle = 1 - toggle;
}