拖拽后获取QTableView的实际行号

Get the actual row number of QTableView after drag and drop

一开始tableview的数据是

  1. 苹果
  2. 馅饼
  3. 香蕉

在tableview上拖放(只拖放自身)item后,tableview的数据如下所示

  1. 香蕉
  2. 馅饼
  3. 苹果

但是当我想一个一个地迭代模型的项目时

代码

for(int i = 0; i != rowCount(); ++i){
    if(item(row, Fruit)){
        return item(row, Fruit)->data(Qt::DisplayRole).value<QString>();
    }        
}

它将数据打印为

  1. 苹果
  2. 馅饼
  3. 香蕉

预期结果

  1. 香蕉
  2. 馅饼
  3. 苹果

拖放后如何获得“实际”数字?

我能想到的最简单的解决方案是再创建一列来存储模型的行号,然后覆盖 dropEvent,在用户放下时更新行号 row.Any 更简单的方法?

编辑:

如示例所示,我想要的代码结果是"pie, apple, banana"。但实际结果是"banana, pie, apple"

模型始终对逻辑索引进行操作。您需要使用 verticalHeader() 的 visualIndex 进行迭代。

for(int i = 0; i < rowCount(); ++i)
  {
    // i is the logicalIndex
    int row = your_table->verticalHeader()->visualIndex(i);

    if(item(row, Fruit))
        return item(row, Fruit)->data(Qt::DisplayRole).value<QString>();     
  }