Доступ к внутреннем данным элемента TreeView

205
07 марта 2019, 22:20

Подскажите чайнику,пожалуйста, как обойти ситуацию. В своем приложении решил создать иерархическую структуру данных. Что бы снаружи было видно только названия а вся структура данных была скрыта. Пошарясь по примерам, решил не изобретать велосипед, и как много воспользоваться примером editeble treeview. Надеюсь его кто то изучал тоже. Не могу сказать что хорошее решение, но решил запихнуть в приват образец со своими данными. В классе treeitem определил методы записи данных в объект, в классе treemodel метод записи через метод того элемента treeitem.

Файл treeitem.h:

#ifndef TREEITEM_H
#define TREEITEM_H
#include <QList>
#include <QVariant>
#include <QVector>
#include "test.h"
class TreeItem
{
public:
explicit TreeItem(const QVector<QVariant> &data, TreeItem *parent = 0);
~TreeItem();
TreeItem *child(int number);
int childCount() const;
int columnCount() const;
QVariant data(int column) const;
bool insertChildren(int position, int count, int columns);
bool insertColumns(int position, int columns);
TreeItem *parent();
bool removeChildren(int position, int count);
bool removeColumns(int position, int columns);
int childNumber() const;
bool setData(int column, const QVariant &value);
bool setTestData(const Test &temptest);

private:

QList<TreeItem*> childItems;
QVector<QVariant> itemData;
TreeItem *parentItem;
Test test;
};
#endif // TREEITEM_H

Метод из файла Treemodel.cpp

bool TreeModel::setTestData(const QModelIndex &index, const Test temptest, 
int role) 
{
if (role != Qt::EditRole)
    return false;
TreeItem *item = getItem(index);
bool result = item->setTestData(temptest);
if (result)
    emit dataChanged(index, index);
return result;
}

Data, которая хранится в векторах, решил оставить для наименований моего объекта и прочей инфы. Управление структурой дерева осуществляю через взаимное погашение элементов меню. Ну так вот, после установки модели в виджет Qtreeview,

workSpace->setModel(model);

я не могу пользоваться этими методами.

Предполагалось что это будет что то вроде:

bool MainWindow::writeTestToItem(Test temptest)
{
QModelIndex index = workSpace->selectionModel()->currentIndex();
QAbstractItemModel *model = workSpace->model();   
bool result = model->setTestData(index, temptest, Qt::EditRole);
return result;
}

Вот, так. Данные хранить где то хочется. Желательно в дереве. Спасибо.

READ ALSO
Перегрузка оператора присваивания в C++

Перегрузка оператора присваивания в C++

Нужна помощь умных людейНужно: Создать класс СТРОКА, реализующий текстовую строку

163
работа конструктора String(const char*)

работа конструктора String(const char*)

Был такой вопрос: Преобразование char[] в string

135
Как вывести ноль перед числом. С++

Как вывести ноль перед числом. С++

Через std::setfill('0') задаём заполнитель, через std::setw(N) задаём ширину выводимого числаВсё что не занято самим числом будет заполнено символом-заполнителем

196
C++ curl получить utf-8 в кирилице

C++ curl получить utf-8 в кирилице

Есть документ в интернете в UTF-8

171