Это мой заголовочный файл для объекта-контейнера.
class Container
{
private:
std::string stdstrContainerName;
std::string stdstrPluginType;
int iSegments;
float fRadius;
public:
Container();
Container(std::string , std::string , int , float);
Container(const Container& obj);
~Container();
std::string GetName();
std::string GetType();
void SetName(std::string stdstrName);
};
Q_DECLARE_METATYPE( Container )
Я использую Контейнер в качестве типа данных в TreeItem.
class TreeItem
{
public:
explicit TreeItem( const Container &data , TreeItem *parent = 0 );
~TreeItem();
TreeItem *parent();
TreeItem *child(int iNumber);
int childCount() const;
int childNumber() const;
Container data() const;
bool setData(const Container &data);
bool insertChildren(int position, int count );
bool removeChildren( int position , int count );
private:
QList<TreeItem*> childItems;
Container itemData;
TreeItem* parentItem;
};
Проблема в том, что когда я добавляю строки в древовидную структуру, строки добавляются, но без текста на них.
Я хочу установить данные в stdstrContainerName как данные в строке.
если я попытаюсь что-то написать, оно не останется.
Мне кажется, проблема в моих функциях, которые устанавливают данные для объекта TreeItem
Container TreeItem::data() const
{
return itemData;
}
bool TreeItem::setData(const Container &data , QVariant value )
{
itemData = data;
itemData.SetName(value.toString().toStdString() );
return true;
}
/
Функция данных для модели дерева
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (role != Qt::DisplayRole && role != Qt::EditRole)
return QVariant();
TreeItem *item = getItem(index);
return QString::fromStdString(item->data().GetName());
}
bool TreeModel::setData(const QModelIndex &index, const QVariant &val, int
role )
{
if (role != Qt::EditRole)
return false;
Container c = val.value<Container>();
TreeItem *item = getItem(index);
bool result = item->setData(c);
if (result)
emit dataChanged(index, index, { role });
return result;
}
Я также могу опубликовать любой дополнительный код проекта.