Programming/Qt
[Qt] QTreewidget 메모리 해제 없이 비우기
_SYPark
2024. 11. 27. 15:43
728x90
보통 QTreeWidget에서 아이템을 싹 비우려고 할 때 Clear() 함수를 많이 사용합니다. 하지만 이 함수의 경우 QTreeWidget에 가지고 있는 아이템들의 메모리를 해제시키기 때문에 아래와 같이 아이템을 다시 불러오려고 할 때 문제가 생기게 됩니다.
class Test {
Test(uchar nItemCount) {
for ( int i=0; i < nItemCount; i++ ) {
QTreeWidgetItem* it = new QTreeWidgetItem;
items.append(it);
}
}
QList<QTreeWidgetItem*> getItems() { return Items; }
QList<QTreeWidgetItem*> Items;
};
int main() {
Test* t1 = new Test(3);
Test* t2 = new Test(10);
auto items = t1->getItems();
for ( auto i : items ) {
ui->tree->addTopLevelCount(i);
}
ui->tree->clear(); // t1이 갖고 있는 item들 delete 됨
auto items = t2->getItems();
for ( auto i : items ) {
ui->tree->addTopLevelCount(i);
}
ui->tree->clear(); // t2이 갖고 있는 item들 delete 됨
auto items = t1->getItems();
for ( auto i : items ) {
ui->tree->addTopLevelCount(i); // i는 쓰레기 값
}
...
}
이럴때는 clear를 사용하는 것이 아닌 takeTopLevelItem을 통해 단순히 트리에서 제거해주면 됩니다.
while (topLevelItemCount() > 0) {
takeTopLevelItem(0);
} // clear but not delete items
728x90