QAbstractItemModel->插入Qt :: UserRole时,setItemData返回false

时间:2012-11-07 08:42:55

标签: c++ qtreeview qabstractitemmodel

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

1 个答案:

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