0

我不知道为什么当我尝试插入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
}
4

1 回答 1

1

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 实现中。

于 2013-01-16T08:11:18.030 回答