парсю Xml заношу данные в модель. Я походу чего то не понимаю, почему она не выводит.
тут получается пустая модель
model = new treeModel();
treeView = new QTreeView();
//treeView->header()->hide();
treeView->setModel(treeModel);
читаю xml и заношу данные в модель
XmlReader reader;
rootItem = new TreeItem(fileName);
if (!reader.read(inputText.readAll(), fileInfo.baseName(), rootItem))
{
//информация об ошибке
}
else
{
//добавляем имя файла в список
listNameFile.append(fileName);
treeView->setModel(treeModel);
}
ага.
TreeModel::TreeModel(QObject* parent)
:QAbstractItemModel(parent)
{
QVariant rootData;
rootItem = new TreeItem(rootData);
}
TreeModel::~TreeModel()
{
delete rootItem;
}
QModelIndex TreeModel::index(int row, int column, const QModelIndex & parent) const
{
if (!hasIndex(row, column, parent))
return QModelIndex();
TreeItem *parentItem;
if (!parent.isValid())
parentItem = rootItem;
else
parentItem = static_cast<TreeItem*>(parent.internalPointer());
TreeItem *childItem = parentItem->child(row);
if (childItem)
return createIndex(row, column, childItem);
else
return QModelIndex();
}
QModelIndex TreeModel::parent(const QModelIndex & index) const
{
if (!index.isValid())
return QModelIndex();
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
TreeItem *parentItem = childItem->parentItem();
if (parentItem == rootItem)
return QModelIndex();
return createIndex(parentItem->row(), 0, parentItem);
}
int TreeModel::rowCount(const QModelIndex & parent) const
{
TreeItem *parentItem;
if (parent.column() > 0)
return 0;
if (!parent.isValid())
parentItem = rootItem;
else
parentItem = static_cast<TreeItem*>(parent.internalPointer());
return parentItem->childCount();
}
int TreeModel::columnCount(const QModelIndex & parent) const
{
//TODO:
return 1;
}
QVariant TreeModel::data(const QModelIndex & index, int role) const
{
if (!index.isValid())
return QVariant();
if (role != Qt::DisplayRole)
return QVariant();
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
return item->data();
}
Qt::ItemFlags TreeModel::flags(const QModelIndex & index) const
{
if (!index.isValid())
return 0;
return QAbstractItemModel::flags(index);
}
QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int role) const
{
//TODO:
return QVariant();
}
итемс
#include "TreeItem.h"
TreeItem::TreeItem(const QVariant &data, TreeItem *parent)
{
m_parentItem = parent;
m_itemData = data.toString();
}
TreeItem::~TreeItem()
{
qDeleteAll(m_childItems);
}
void TreeItem::addChild(TreeItem *item)
{
m_childItems.append(item);
}
TreeItem *TreeItem::child(int row)
{
return m_childItems.value(row);
}
int TreeItem::childCount() const
{
return m_childItems.count();
}
int TreeItem::columnCount() const
{
//выводит количество колонок, но в таблице должно быть 2 колонки
return 1;
}
QVariant TreeItem::data() const
{
//
return m_itemData;
}
TreeItem *TreeItem::parentItem()
{
return m_parentItem;
}
int TreeItem::row() const
{
if (m_parentItem)
return m_parentItem->m_childItems.indexOf(const_cast<TreeItem*>(this));
return 0;
}
функция реад()
QString data;
data = nameFile;
xmlReader = new QXmlStreamReader(source);
item = new TreeItem(data, parent);
parent->addChild(item);
// и дальше парсер