需求的提出:
有时需要将QTableView、QTableWidget表格控件的垂直滚动条自动滚动到最后一行,如:利用QTableView、QTableWidget展示日志功能,在QTableView、QTableWidget中插入日志时,将离现在时间最近的日志插入到最后一行,即日志按日志时间离现在最久远到最近的顺序在QTableView、QTableWidget控件中从上到下排列展示。QTableView、QTableWidget展示日记记录时,垂直滚动条默认是在第0条日志位置的,不会自动滚动,当日志很多时,要手动拖动垂直滚动条到最下面才能看到最新的那条日志,这样很不方便。如何保证用户不需要手动操作垂直滚动条,就能自动看到离现在时间最近的日志记录?即让QTableView、QTableWidget能自动垂直滚动后一行?
实现代码如下:
auto nLastRowIndex = ui->tableLogWnd->rowCount() - 1; // 最后一行的索引
auto lastModelIndex = ui->tableLogWnd->model()->index(lastRowIndex, 0);
ui->tableLogWnd->scrollTo(lastModelIndex); // 滚动到最后一行
其中ui->tableLogWnd为QTableView、QTableWidget的指针对象; nLastRowIndex为最后一行的行索引, 0表示第0列,对于垂直滚动滚动到哪一列无所谓。
扩展:
假如要将水平滚动条横向滚动到最后一列,则将上述代码的第2行的index函数的第2个参数改为最后一列的列索引即可。