我正在我的 Qt 应用程序(Qt 4.8 版本)中实现
QTableWidget
。
这个QTableWidget由18个
QTableWidgetItem
s组成
当用户想要更改当前选定的单元格时,只需调用:
tblWdgList->setCurrentCell(newCell, 0, QItemSelectionModel::ClearAndSelect);
问题是我想在与当前所选单元格相同的 y 坐标处放置一个小箭头。所以我使用
currentCellChanged
信号。
connect(tblWdgList, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(onCurrentCellChanged(int,int,int,int)));
当发出此
currentCellChanged
信号时,它会调用:
void CAppWdgSettingsLanguage::onCurrentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{
Q_UNUSED(currentColumn)
Q_UNUSED(previousColumn)
lblArrow->move(lblArrow->pos().x(), tblWdgList->y() + tblWdgList->rowViewportPosition(currentRow));
}
这个QTableWidget位于我的应用程序的专用页面中,因此并不总是显示它。 当我打开页面时,它会显示 QTableWidget 并且它应该初始化箭头的位置。 问题是,如果当前选定单元格的索引超过垂直滚动条处于向上位置时可以显示的单元格数量,则初始化期间
rowViewportPosition()
返回的值是错误的。
这意味着,如果我在
setCurrentCell
显示之前或刚显示之后调用 QTableWidget
方法,则无论 rowViewportPosition()
的几何形状如何,QTableWidget
都会返回 y 坐标,就好像没有滚动条一样。但是,如果我将 onCurrentCellChanged
的调用延迟大约 200 毫秒(可能是最小延迟,仅用于测试目的),则 rowViewportPosition() 方法将返回正确的值。