我有QTableView
我需要"锁定"选定的行。要求是必须将所选行移动到表的中间,然后必须禁用表的滚动。
这很容易使用大型模型并在模型中间的某处选择一行:
ui->tableView->scrollTo(ui->tableView->currentIndex(), QAbstractItemView::PositionAtCenter );
但是,如果所选行靠近模型的顶部或底部,则它不会显示在表格的中间。由于无法滚动浏览最后一项。
我查看了表格的QScrollbar
:
QScrollBar *scrollbar = ui->tableView->verticalScrollBar();
scrollbar->setMaximum( scrollbar->maximum() + scrollbar->singleStep()*10 );
这会在桌子的底部添加十个白色空格,如果我现在"锁定"靠近底部的一行,它将显示在TableView的中间。这很有效。
但是,尝试将空格添加到表格的顶部,似乎无法正常工作:
scrollbar->setMinimum( scrollbar->minimum() - scrollbar->singleStep()*10 );
上面的代码确实添加了空白区域,但它以一些奇怪的行为打破了tableview。数据行是不可见的,只有通过单击它们(选择它们)它们才会再次显示,只有在表失去焦点时才会消失。
QScrollbar::Minimum
值是否有限制?我可以不让它消极吗?或者我在这里缺少什么?