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
'Programming > Qt' 카테고리의 다른 글
[Qt] QtConcurrent mappedReduced 사용하기 (0) | 2024.11.08 |
---|---|
[Qt] QTreeWiget Data Json 형태로 Save/Load 하는 방법 (0) | 2024.11.06 |
[Qt] 다른 쓰레드에서 QTimer 처리하기 (1) | 2024.10.22 |
[Qt] QTableWidget header 정보는 남기고 내용만 지우기 (0) | 2024.07.18 |
[Qt] Qt + PCAN API를 이용한 CAN Chat 프로그램 (0) | 2024.07.18 |