用C++保存QTreeWidget多列数据到xml,再读取xml显示为QTreeWidget
时间: 2024-05-15 21:16:29 浏览: 128
以下是一个示例程序,演示了如何使用C++ Qt框架保存QTreeWidget多列数据到xml,并从xml中读取数据以显示在QTreeWidget中。
```cpp
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建QTreeWidget
QTreeWidget treeWidget;
treeWidget.setHeaderLabels({"Name", "Age", "Gender"});
// 添加数据
QTreeWidgetItem *item1 = new QTreeWidgetItem(&treeWidget, {"Tom", "30", "Male"});
QTreeWidgetItem *item2 = new QTreeWidgetItem(&treeWidget, {"Alice", "25", "Female"});
QTreeWidgetItem *item3 = new QTreeWidgetItem(&treeWidget, {"Bob", "40", "Male"});
// 创建QDomDocument
QDomDocument doc;
// 创建根元素
QDomElement root = doc.createElement("tree");
doc.appendChild(root);
// 遍历QTreeWidget,将数据保存到QDomDocument中
for(int i = 0; i < treeWidget.topLevelItemCount(); i++) {
QTreeWidgetItem *item = treeWidget.topLevelItem(i);
QDomElement element = doc.createElement("item");
element.setAttribute("name", item->text(0));
element.setAttribute("age", item->text(1));
element.setAttribute("gender", item->text(2));
root.appendChild(element);
}
// 将QDomDocument保存为xml文件
QFile file("data.xml");
file.open(QIODevice::WriteOnly);
QTextStream out(&file);
out << doc.toString();
file.close();
// 从xml文件中读取数据
QFile inputFile("data.xml");
if(inputFile.open(QIODevice::ReadOnly)) {
if(doc.setContent(&inputFile)) {
QDomElement root = doc.documentElement();
for(QDomNode node = root.firstChild(); !node.isNull(); node = node.nextSibling()) {
if(node.isElement()) {
QDomElement element = node.toElement();
QStringList data;
data << element.attribute("name") << element.attribute("age") << element.attribute("gender");
QTreeWidgetItem *item = new QTreeWidgetItem(&treeWidget, data);
}
}
}
inputFile.close();
}
// 显示QTreeWidget
treeWidget.show();
return app.exec();
}
```
在该示例程序中,首先创建了一个QTreeWidget,并向其中添加了三个条目。接着使用QDomDocument将QTreeWidget中的数据保存为xml文件,然后从xml文件中读取数据以显示在QTreeWidget中。在保存和读取数据时,使用了QDomElement和QDomNode等类来访问和操作xml文档。最后,显示了QTreeWidget以展示数据。
阅读全文