QTreeWidget에 Data를 추가 한 후 Json 형태로 Save 및 Load 하는 방법입니다.
먼저 좌측에 간단한 데이터가 입력된 Tree가 있고 Save로 Data를 Json 형태로 저장 후 Load 시 우측의 Tree에 Json Data를 출력하는 간단한 예제입니다.
아래는 코드 입니다. Save 버튼을 클릭했을 때 Tree의 정보를 Json형태로 Save 하고 Load 버튼을 클릭했을 때 Json을 읽어서 Tree에 Item을 생성하여 넣어줍니다.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect ( ui->btnSave, &QPushButton::clicked, this, [&] {
QJsonObject saveData; // 전체 Json 저장할 Object 객체
QFile saveFile("SaveFile.json");
if ( !saveFile.open(QIODevice::WriteOnly) ) {
return;
}
QJsonArray TopArray; // Top Item을 저장할 Array 객체
for ( int i = 0; i < ui->saveTree->topLevelItemCount(); i++ ) {
QJsonObject TopObject;
auto TopItem = ui->saveTree->topLevelItem(i);
TopObject.insert("Name", TopItem->text(0));
QJsonArray ChildArray; // Child Item을 저장할 Array 객체
for ( int c = 0; c < TopItem->childCount(); c++ ) {
QJsonObject ChildObject;
auto ChildItem = TopItem->child(c);
ChildObject.insert("Name", ChildItem->text(0));
ChildObject.insert("Value", ChildItem->text(1));
ChildArray.append(ChildObject);
}
TopObject.insert("Child", ChildArray);
TopArray.append(TopObject);
}
saveData.insert("Top", TopArray);
saveFile.write(QJsonDocument(saveData).toJson());
saveFile.close();
});
connect ( ui->btnLoad, &QPushButton::clicked, this, [&] {
QFile loadFile("SaveFile.json");
if ( !loadFile.open(QIODevice::ReadOnly) ) {
return;
}
QJsonDocument loadDocument = QJsonDocument::fromJson(loadFile.readAll());
auto TopData = loadDocument.object().value("Top").toArray(); // Top Array 정보를 불러옴
for ( auto topIt = TopData.cbegin(); topIt != TopData.cend(); ++topIt ) {
auto top = (*topIt).toObject();
auto makeItem = [&](QJsonObject& topJson) -> QTreeWidgetItem* {
QTreeWidgetItem* topItem = new QTreeWidgetItem;
topItem->setText(0, topJson.value("Name").toString());
auto Child = topJson.value("Child").toArray(); // Top 하위의 Child Array 정보를 불러옴
for ( auto childIt = Child.cbegin(); childIt != Child.cend(); ++childIt ) {
auto childObject = (*childIt).toObject();
QTreeWidgetItem* childItem = new QTreeWidgetItem(topItem);
childItem->setText(0, childObject.value("Name").toString());
childItem->setText(1, childObject.value("Value").toString());
}
return topItem;
}; // Top 정보를 가지고 Item 생성해주는 람다 함수
ui->loadTree->addTopLevelItem(makeItem(top));
}
loadFile.close();
});
}
{
"Top": [
{
"Child": [
{
"Name": "Ten",
"Value": "10"
},
{
"Name": "Eleven",
"Value": "11"
}
],
"Name": "One"
},
{
"Child": [
],
"Name": "Two"
}
]
}
'Programming > Qt' 카테고리의 다른 글
[Qt] 다른 쓰레드에서 QTimer 처리하기 (1) | 2024.10.22 |
---|---|
[Qt] QTableWidget header 정보는 남기고 내용만 지우기 (0) | 2024.07.18 |
[Qt] Qt + PCAN API를 이용한 CAN Chat 프로그램 (0) | 2024.07.18 |
[Qt] QString::toInt 주의사항 (0) | 2024.06.24 |
[Qt] Drag&Drop으로 QTreeWidget 제어하기 (1) | 2024.06.14 |