如何获取insertRows源代码?

时间:2013-07-29 01:52:40

标签: c++ qt

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

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;
}

不幸的是,我似乎无法找到一个可以让我抓住被移动物品的元素的地方。我该怎么做?

2 个答案:

答案 0 :(得分:1)

我认为mDinsertRows是自定义模型类的成员。

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

答案 1 :(得分:0)

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

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

你的样本中都没问题。

视图将在调用endInsertRows后插入空行(如@Riateche所述)并自动填充。您需要的只是覆盖YourModel::data方法以从您的mD结构返回正确的数据。

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

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