我在Qt 5中有一个关于自动滚动的问题。现在,qt仅支持禁用自动滚动,这意味着禁用水平和垂直自动滚动。如果我只想在QTableView中禁用水平AUTO滚动怎么办?
提前谢谢。
答案 0 :(得分:1)
我假设您正在使用小部件。
如果您不想要水平滚动条:
具有滚动功能的小部件源自QAbstractScrollArea
。
QAbstractScrollArea
有一个函数setHorizontalScrollBarPolicy
,可用于关闭水平滚动条。您需要设置Qt::ScrollBarAlwaysOff
。
示例:
yourScrollableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff)
如果要禁用水平滚动条,请按以下步骤操作:
获取水平滚动条的对象。并致电setEnabled
。
QScrollBar *hScrollBar = yourScrollableWidget->horizontalScrollBar();
*hScrollBar->setEnabled(false);
答案 1 :(得分:0)
您可以重写void QAbstractItemView :: scrollTo。适用于我的一种解决方案如下:
void MyTableView::scrollTo(const QModelIndex &index, ScrollHint hint) {
int bottomMargin(2);
if (hint == QAbstractItemView::EnsureVisible &&
index.row() > indexAt(rect().topLeft()).row() &&
index.row() < indexAt(rect().bottomLeft()).row() - bottomMargin) {
return;
}
QTableView::scrollTo(index, hint);
}
您可以使用bottomMargin的值来获得最佳的垂直方向自动滚动。