QT 5 为什么 item->row(); 不返回合并左上角单元格
时间: 2024-02-28 07:54:47 浏览: 24
在QT 5中,`item->row()`方法返回的是该项所在的行的索引,而不是该项所在的合并单元格的左上角单元格的行索引。这种行为与QT 4中的行为是一致的。
如果想要获取该项所在的合并单元格的左上角单元格的行索引,可以使用`QTableWidget`的`rowSpan()`和`verticalHeaderItem()`方法来实现。具体的代码如下:
```cpp
int row = tableWidget->row(item);
int col = tableWidget->column(item);
int rowSpan = tableWidget->rowSpan(row, col);
int rowTop = row - (rowSpan - 1);
QTableWidgetItem *topLeft = tableWidget->verticalHeaderItem(rowTop, col);
int rowTopIndex = topLeft ? topLeft->row() : -1;
```
其中,`rowSpan()`方法返回该项所在的合并单元格所占据的行数,`rowTop`变量计算出了该合并单元格的左上角单元格的行索引,然后使用`verticalHeaderItem()`方法获取该单元格的`QTableWidgetItem`对象,最后可以通过该对象的`row()`方法获取该单元格的行索引。需要注意的是,如果该单元格并没有设置`QTableWidgetItem`对象,`verticalHeaderItem()`方法会返回`nullptr`,此时需要特殊处理。