#include "XmlModel.h" #include <QDebug> XmlModel::XmlModel(QByteArray *data) { if (data) { m_doc.setContent(*data); initModel(); } } void XmlModel::setXMLData(QByteArray *data) { if (data) { beginResetModel(); m_doc.setContent(*data); initModel(); endResetModel(); } } void XmlModel::initModel(){ m_items = m_doc.firstChildElement("items"); parseHeaders(); } void XmlModel::parseHeaders() { m_fields.clear(); QDomNode root = m_doc.firstChildElement("items"); QDomNode item = root.firstChild(); for (int i=0; i<item.childNodes().count();++i){ QDomNode attr = item.childNodes().item(i); m_fields.append(attr.nodeName()); } } QModelIndex XmlModel::index(int row, int column, const QModelIndex &parent) const { if (m_fields.isEmpty()) return QModelIndex(); return createIndex(row, column); } QModelIndex XmlModel::parent(const QModelIndex &child) const { return QModelIndex(); } int XmlModel::rowCount(const QModelIndex &parent) const { return m_items.childNodes().count(); } int XmlModel::columnCount(const QModelIndex &parent) const { return m_fields.count(); } QVariant XmlModel::data(const QModelIndex &index, int role) const { if (role == Qt::DisplayRole) { if (index.isValid()){ QDomNode data = m_items.childNodes().at(index.row()).childNodes().item(index.column()); return data.toElement().text(); } else return QVariant(); } else return QVariant(); } QVariant XmlModel::headerData(int section, Qt::Orientation orientation, int role) const { if(orientation==Qt::Horizontal&&role==Qt::DisplayRole){ return m_fields[section]; } else return QVariant(); }