#include "XmlModel.h" #include 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(); }