QAbstractItemModel-> gt; setItemData возвращает false при вставке Qt :: UserRole

Я понятия не имею, почему, когда я пытаюсь вставить 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

Решение

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 у вас есть в конкретной модели.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]