QT Tree存储 XML的数据
来源:互联网 发布:软件杂志高岚 编辑:程序博客网 时间:2024/05/20 11:49
使用treeview的时候有时会在节点中存储一些数据,以供点击的时候根据存储的数据响应相应的时间。
一下做一次简要的概括:
从XML中读取数据并存入Tree的data中
XML文件为:
<?xml version ="1.0"?><LIST><DEVICE ID="0" NAME="ipc1" IP="192.168.1.100" PORT="554" /><DEVICE ID="1" NAME="ipc2" IP="192.168.1.155" PORT="554" /><DEVICE ID="2" NAME="ipc3" IP="192.168.1.198" PORT="554" /></LIST>
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtCore>#include <QtXml>#include <QTreeWidget>namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); struct DeviceInfo { QString id; QString name; QString ip; QString port; };private slots: void on_actionOpen_triggered(); void TreeViewDoubleClick(const QModelIndex inIndex);private: Ui::MainWindow *ui; QTreeWidget *fTree;private: int ReadXML(); void PraseXMLToTree(QDomDocument inDoc, QTreeWidget *inTree); QDomDocument fDoc; QString fFileName; DeviceInfo **fDeviceInfoArray; int fXMLCount; static int sDataColumn; static int sDataRole;};#endif // MAINWINDOW_H
</pre><pre name="code" class="cpp">#include "mainwindow.h"#include "ui_mainwindow.h"static QString XMLFILENAME = "D:/Device.xml";int MainWindow::sDataColumn = 1; //can't set 0int MainWindow::sDataRole = 0;MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), fFileName(XMLFILENAME){ ui->setupUi(this); fTree = new QTreeWidget(); fTree->setColumnCount(1); fTree->setHeaderLabel("Devices"); fTree->setParent(ui->centralWidget); fTree->move(0,0); fTree->resize(100,500); fTree->show(); connect(fTree,SIGNAL(doubleClicked(const QModelIndex)),this,SLOT(TreeViewDoubleClick(const QModelIndex))); ReadXML();}MainWindow::~MainWindow(){ if(fDeviceInfoArray != NULL) { for(int i=0; i< fXMLCount;i++) { delete fDeviceInfoArray[i]; fDeviceInfoArray[i] = NULL; } } delete []fDeviceInfoArray; delete ui;}int MainWindow::ReadXML(){ QFile file(fFileName); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()<<"failed to open file !"; return -1; } else { if(!fDoc.setContent(&file)) { qDebug()<<"failed to load document !"; return -1; } file.close(); } PraseXMLToTree(fDoc,fTree); return 0;}void MainWindow::PraseXMLToTree(QDomDocument inDoc, QTreeWidget *inTree){ QDomElement root = inDoc.firstChildElement(); //get the root QString rootName = root.tagName(); QTreeWidgetItem *rootNode = new QTreeWidgetItem(QStringList(rootName)); inTree->addTopLevelItem(rootNode); QDomNodeList items = root.childNodes(); fXMLCount = items.count(); fDeviceInfoArray = new DeviceInfo*[fXMLCount]; qDebug()<< "total items = " << items.count(); for(int i = 0; i< items.count();i++) { QDomNode itemnode = items.at(i); if(itemnode.isElement()) { fDeviceInfoArray[i] = new DeviceInfo(); QDomElement itemElem = itemnode.toElement(); fDeviceInfoArray[i]->id = itemElem.attribute("ID"); fDeviceInfoArray[i]->name = itemElem.attribute("NAME"); fDeviceInfoArray[i]->ip = itemElem.attribute("IP"); fDeviceInfoArray[i]->port = itemElem.attribute("PORT"); QTreeWidgetItem *treeNode = new QTreeWidgetItem(QStringList(fDeviceInfoArray[i]->name)); treeNode->setData(sDataColumn,sDataRole,QVariant::fromValue((void *) fDeviceInfoArray[i])); rootNode->addChild(treeNode); } }}void MainWindow::TreeViewDoubleClick(const QModelIndex inIndex){ DeviceInfo *currDevice = (DeviceInfo *)fTree->currentItem()->data(sDataColumn,sDataRole).value<void *>(); ui->label->setText( currDevice->id + "\n" + currDevice->name + "\n" + currDevice->ip + "\n" + currDevice->port);}
0 0
- QT Tree存储 XML的数据
- B-Tree数据存储
- 看懂Qt源代码-Qt源码的对象数据存储
- 看懂Qt源代码-Qt源码的对象数据存储
- 返回xml数据的存储过程
- 存储XML格式数据的原理
- 存储XML格式数据的原理
- 以XML存储数据的HTML
- Qt XML数据解析
- xml存储数据的简单例子,php&xml留言板
- XML如何存储数据
- cocos2dx xml 数据存储
- xml数据存储
- 数据存储和xml
- Android_数据存储XML
- QT Internal: 对象数据存储
- QT Internal: 对象数据存储
- mondrian 如何使用xml存储olap服务器的元数据
- codeforces round #262 (div2)
- 中国基础**服务平台项目管理
- 韩国济州岛賭场相关介绍
- 全自动过滤器:全自动清洗过滤器处理水质特点剖析
- POJ 3686 最小费用最大流(拆点建图)
- QT Tree存储 XML的数据
- PAT 1049. Counting Ones (30)
- workspace & subProject & target
- 四种不同的XML解析方法
- 黑马程序员-String总结
- NYOJ-5个数求最值
- 如何做好电源电子设备的电磁兼容?
- HDU1003- Max Sum(DP优化入门题目)
- UI 通过手指捏合来完成缩放图片