在Qt中删除框架并更换新框架?

时间:2014-03-21 16:06:42

标签: c++ qt

我正在尝试用新的框架替换框架。第一个函数工作正常并且框架被替换,但是当我尝试恢复时,在第二个函数上,调试正确地显示“blah”,但除此之外,没有任何反应。

void MainWindow::on_actionPageViewer_triggered()
{
    ui->gridLayout->removeWidget(sc_e->ui->widget);
    ui->gridLayout->addWidget(sc_p->ui->widget);
}

void MainWindow::on_actionEditor_triggered()
{
    qDebug()<< "blah";
    ui->gridLayout->removeWidget(sc_p->ui->widget);
    ui->gridLayout->addWidget(sc_e->ui->widget);
}

2 个答案:

答案 0 :(得分:0)

调用ui->gridLayout->removeWidget(QWidget*)会删除小部件,因此无法再添加。我可以在初始化时添加所有小部件,而不是删除它,然后使用setVisible()使其显示或隐藏它。

所以现在代码看起来像这样:

在初始化中:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->gridLayout->addWidget(sc_e->ui->widget);
    ui->gridLayout->addWidget(sc_p->ui->widget);
    sc_p->ui->widget->setVisible(false);
}

然后:

void MainWindow::on_actionPageViewer_triggered()
{

    ui->gridLayout->update();
    sc_e->ui->widget->setVisible(false);
    sc_p->ui->widget->setVisible(true);

}

void MainWindow::on_actionEditor_triggered()
{

    qDebug()<< "blah";
    sc_p->ui->widget->setVisible(false);
    sc_e->ui->widget->setVisible(true);

}

答案 1 :(得分:0)

在将小部件添加到布局后,您是否尝试显示()小部件?