0

我正在为项目重新排列检测模型/视图,但我无法理解如何覆盖该insertRows方法。只是为了练习,我试图std::vector用自定义结构包装 a 。

std::vector<aStruct> mD;//my data
bool insertRows(int start, int rows, const QModelIndex & parent)
{
    auto i = parent.row();
    cout <<"I going to " << start << ":" << rows << " choosing "<< i<< endl;
    beginInsertRows(parent, start, start + rows - 1);
    aStruct blank(0);// Should be the value of the item being moved?
    mD.insert(mD.begin()+start,blank);
    endInsertRows();
    return true;
}

不幸的是,我似乎找不到一个地方可以让我抓住正在移动的项目。我该怎么做呢?

4

2 回答 2

1

我假设mDandinsertRows是自定义模型类的成员。

insertRows没有收到有关插入行内容的任何信息。应插入空值。行应该用setData虚拟方法实现中的数据填充。

于 2013-07-29T07:58:43.030 回答
0

您应该使用后续步骤来插入行:

1. Call beginInsertRows
2. Modify your internal data structure
3. Call endInsertRows

您的样本中一切正常。

View 将插入空行(如@Riateche 所说)并调用endInsertRows. 您所需要的只是覆盖YourModel::data方法以从您的 mD 结构返回正确的数据。

View 将YourModel::data在插入空行后立即调用方法。你不需要做任何额外的操作。View 会关心“填充”它。

YourModel::setData当用户想要通过视图小部件更改数据时,方法的覆盖主要用于视图和模型之间的交互。

于 2013-07-29T09:55:57.280 回答