Это достаточно хорошо документированная проблема, но после некоторых чтений и попыток я все еще пытаюсь удалить пользовательский виджет из 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]);
}
}
}
Ни один из вышеперечисленных работ, и я не смог понять почему.