这是我的Container对象的头文件。
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 )
我使用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;
}
我还可以发布该项目的任何其他代码。
答案 0 :(得分:1)
这里缺少的是您的视图代码。
派生自build/hsc
的视图不能单独显示QAbstractItemView
Container
。
QVariant
并显示例如其Container-QVariant
GetName()
的编辑器Container-QVariant
和item->GetName()
返回->GetType()
,role
index.column()
中传递的文本来操作Container
中的TreeItem
实例