【问题标题】:Remove Widget from QSplitter从 QSplitter 中删除小部件
【发布时间】:2013-12-02 12:31:14
【问题描述】:

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

这就是答案:

当你 hide() 一个孩子时,它的空间将分配给其他孩子。当您再次显示()时,它将恢复。

我已经尝试过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

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

有人有想法吗?

【问题讨论】:

    标签: c++ qt qsplitter


    【解决方案1】:

    不要使用删除,而是使用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);
    }
    

    【讨论】:

    • 我已经测试了你的代码,但我得到了以下异常:QObject(0x0) The program has unexpectedly finished.我的编译器不支持auto消息:warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]
    • 这行惹麻烦setParent(NULL);
    • old->setParent(0) 抛出同样的异常The program has unexpectedly finished,对不起;(
    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多