beginMoveRows/endMoveRows用法

// 向上移动一行
void moveUp(int idx)
{
    if (idx <= 0)
        return;

    beginMoveRows(QModelIndex(), idx, idx, QModelIndex(), idx-1);

    Element item = vec.at(idx);
    vec.insert(vec.begin() + (idx-1), item);
    vec.erase(vec.begin() + (idx+1));

    endMoveRows();
}

// 向下移动一行
void moveDown(int idx)
{
    if (idx < 0 || idx + 1 > vec.size() - 1)
        return;

    // beginMoveRows是插入在目标行的前面,所以需要加2
    beginMoveRows(QModelIndex(), idx, idx, QModelIndex(), idx+2);

    Element item = vec.at(idx);
    vec.insert(vec.begin() + (idx+2), item);
    vec.erase(vec.begin() + idx);

    endMoveRows();
}

你可能感兴趣的:(QT,qt)