拖拽后获取QTableView的实际行号
Get the actual row number of QTableView after drag and drop
一开始tableview的数据是
- 苹果
- 馅饼
- 香蕉
在tableview上拖放(只拖放自身)item后,tableview的数据如下所示
- 香蕉
- 馅饼
- 苹果
但是当我想一个一个地迭代模型的项目时
代码
for(int i = 0; i != rowCount(); ++i){
if(item(row, Fruit)){
return item(row, Fruit)->data(Qt::DisplayRole).value<QString>();
}
}
它将数据打印为
- 苹果
- 馅饼
- 香蕉
预期结果
- 香蕉
- 馅饼
- 苹果
拖放后如何获得“实际”数字?
我能想到的最简单的解决方案是再创建一列来存储模型的行号,然后覆盖 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>();
}
一开始tableview的数据是
- 苹果
- 馅饼
- 香蕉
在tableview上拖放(只拖放自身)item后,tableview的数据如下所示
- 香蕉
- 馅饼
- 苹果
但是当我想一个一个地迭代模型的项目时
代码
for(int i = 0; i != rowCount(); ++i){
if(item(row, Fruit)){
return item(row, Fruit)->data(Qt::DisplayRole).value<QString>();
}
}
它将数据打印为
- 苹果
- 馅饼
- 香蕉
预期结果
- 香蕉
- 馅饼
- 苹果
拖放后如何获得“实际”数字?
我能想到的最简单的解决方案是再创建一列来存储模型的行号,然后覆盖 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>();
}