Russian Qt Forum
Март 29, 2024, 13:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не отображается модель  (Прочитано 4904 раз)
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);
// и дальше парсер
Записан
nvek
Гость
« Ответ #1 : Март 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);

Записан
nvek
Гость
« Ответ #2 : Март 23, 2017, 13:21 »

отбой, сам решил
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Март 23, 2017, 13:24 »

Решение в студию!
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
nvek
Гость
« Ответ #4 : Март 28, 2017, 06:42 »

все правильно заносилось, вот только не обновлялось
Записан
nvek
Гость
« Ответ #5 : Март 28, 2017, 06:48 »

получается запизиваю в модель вот так вот:
Код:
ModelItem* item = new ModelItem(node); //тут указываю на родителя
node->addChild(item);
//тут на потомка
как избежать такой цикличности? и как все должно быть?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.