Название: не отображается модель
Отправлено: nvek от Март 23, 2017, 08:20
парсю 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); // и дальше парсер
Название: Re: не отображается модель
Отправлено: nvek от Март 23, 2017, 08:32
я тут пошаманил. увидел, что у меня что то вобще не правильно QTreeView * tw = new QTreeView(); tw->show(); tw->setModel(treeCtrl); вот так вот отображает, но если treeView = new QTreeView(); treeView->header()->hide(); treeView->setModel(treeCtrl); нет. возможно потому что я запихиваю все в доквиджет? вот полный код treeCtrl = new StatTreeCtrl();
treeView = new QTreeView(); treeView->header()->hide();
QTreeView * tw = new QTreeView(); tw->show(); tw->setModel(treeCtrl);
//для вызова меню по райтклику treeView->setSelectionMode(QAbstractItemView::ExtendedSelection); treeView->setContextMenuPolicy(Qt::CustomContextMenu); connect(treeView, &QWidget::customContextMenuRequested, this, &MainForm::treeContextMenu); //connect(treeWidget, &QTreeWidget::itemClicked, this, &MainForm::updateAction); dockData = new QDockWidget(DOCK_SOURCES); //создали док. dockData->setWidget(treeView); addDockWidget(Qt::LeftDockWidgetArea, dockData);
Название: Re: не отображается модель
Отправлено: nvek от Март 23, 2017, 13:21
отбой, сам решил
Название: Re: не отображается модель
Отправлено: Пантер от Март 23, 2017, 13:24
Решение в студию!
Название: Re: не отображается модель
Отправлено: nvek от Март 28, 2017, 06:42
все правильно заносилось, вот только не обновлялось
Название: Re: не отображается модель
Отправлено: nvek от Март 28, 2017, 06:48
получается запизиваю в модель вот так вот: ModelItem* item = new ModelItem(node); //тут указываю на родителя node->addChild(item); //тут на потомка как избежать такой цикличности? и как все должно быть?
|