我不知道为什么当我尝试将Qt::UserRole
插入QTreeView
项时,它总是返回false
但是当我输入Qt::EditRole
时
这是代码:
void TreeVieweX::insertRow(QString& slink)
{
QModelIndex index = this->selectionModel()->currentIndex();
QAbstractItemModel *model = this->model();
int iRowCount = this->model()->rowCount();
if (!model->insertRow(iRowCount, index.parent()))
return;
QModelIndex child = model->index(iRowCount,0, index.parent());
bool bEditRole = model->setData(child, QVariant(slink), Qt::EditRole); // working great can fetch the data later
QHash<QString, QVariant> indexSelectedMap;
indexSelectedMap.insert("site_name",QVariant(slink));
QMap<int, QVariant> roles;
roles.insert(Qt::UserRole,indexSelectedMap);
bool bUserRole = model->setItemData( index.parent(),roles); //returns false , cant fetch data later
}
答案 0 :(得分:0)
QAbstractItemModel :: setItemData只是一个便利函数,它为角色映射中的每个项调用setData。
bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
{
bool b = true;
for (QMap<int, QVariant>::ConstIterator it = roles.begin(); it != roles.end(); ++it)
b = b && setData(index, it.value(), it.key());
return b;
}
假设您的模型没有重新实现setItemData,问题可能出在您在具体模型中的setData实现中。