从QSplitter中删除Widget

时间:2013-12-02 12:31:15

标签: c++ qt qsplitter

很久以前,有人问了同样的问题。 How to remove...

这就是答案:

  

当你隐藏()一个孩子时,它的空间将分配给其他孩子。当你再次展示它时,它将被恢复。

我已尝试过QSplitter::hide()show()update()函数以及delete。 没有任何效果。

//class.cpp

void PlainView::addComponent(QWidget *widget)
{
  qDebug() << _splitOne->widget(1);

  //delete current widget on index 1
  delete _splitOne->widget(1);
  //add new widget on index 1
  _splitOne->addWidget(widget);

  qDebug() << _splitOne->widget(1);
}

//output
QObject(0x0)  
QTextEdit(0xa0f580

删除了第一个小部件,并添加了新的小部件。但我看不到新的小工具。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

不要使用删除,而是使用deleteLater(),您需要先删除旧的小部件:

void PlainView::addComponent(QWidget *widget)
{
  qDebug() << _splitOne->widget(1);
  QWidget *old = _splitOne->widget(1);

  // deparenting removes the widget from the gui
  old->setParent(0);
  //delete current widget on index 1
  old->deleteLater()

  //add new widget on index 1
  _splitOne->insertWidget(1,widget);
  widget->show();

  qDebug() << _splitOne->widget(1);
}