2015-11-13 13 views
0

Это достаточно хорошо документированная проблема, но после некоторых чтений и попыток я все еще пытаюсь удалить пользовательский виджет из QVBoxLayout.не может удалить пользовательский QWidget из QVBoxLayout

в файле MyClass.h, я заявляю, вектор держать QPointer объекты:

vector< QPointer<MyWidget> > myWidgets; 

В файле MyClass.cpp, я создаю виджет и добавить его в макет с:

// create object 
void MyClass::createMyWidget() { 
    QPointer<MyWidget> myWidget(new MyWidget()); 
    myWidgets.push_back(myWidget); 
} 

//display in layout 
void MyClass::displayWidgets() { 
    for(int i = 0; i < myWidgets.size(); i++) { 
     myWidgets[i]->setId(i); 
     ui->myVBoxLayout->addWidget(myWidgets[i].data()); 
    } 
} 

Я пробовал для того, чтобы удалить вид из макета:

void MyClass::removeMyWidget(int id) { // id of the custom widget. id is also position in the layout 
    for(int i = 0; i < myWidgets.size(); i++) { 
     if(items[i]->getId() == id) { //correctly targets the widget 
      // method 1 
      ui->myVBoxLayout->removeItem(ui->myVBoxLayout->takeAt(i)); 

      //method 2 
      //ui->myVBoxLayout->removeWidget(items[i]); 
     } 
    } 
} 

Ни один из вышеперечисленных работ, и я не смог понять почему.

ответ

2

В Qt макет - это просто менеджер для определения размеров и позиционирования виджетов (и других элементов, таких как вложенные макеты или проставки).

Когда вы удаляете элемент из макета, он по-прежнему является дочерним виджетами родительского виджета, который выкладывается макетом, только что его геометрия больше не управляется. Тем не менее, виджет присутствует и отображается, и пользователь может взаимодействовать с ним.

Вам также нужно его удалить или скрыть. Попробуйте

void MyClass::removeMyWidget(int id){ // id of the custom widget. id is also position in the layout 
    for(int i=0;i<myWidgets.size();i++){ 
     if(items[i]->getId() == id){ //correctly targets the widget 
      ui->myVBoxLayout->removeWidget(myWidgets[i]); 
      delete myWidgets[i]; // <= Delete widget 
     } 
    } 
} 
Смежные вопросы