Подскажите чайнику,пожалуйста, как обойти ситуацию. В своем приложении решил создать иерархическую структуру данных. Что бы снаружи было видно только названия а вся структура данных была скрыта. Пошарясь по примерам, решил не изобретать велосипед, и как много воспользоваться примером 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;
}
Вот, так. Данные хранить где то хочется. Желательно в дереве. Спасибо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужна помощь умных людейНужно: Создать класс СТРОКА, реализующий текстовую строку
Через std::setfill('0') задаём заполнитель, через std::setw(N) задаём ширину выводимого числаВсё что не занято самим числом будет заполнено символом-заполнителем