在Qt5中禁用水平自动滚动

时间:2017-11-21 20:53:51

标签: qt qt5

我在Qt 5中有一个关于自动滚动的问题。现在,qt仅支持禁用自动滚动,这意味着禁用水平和垂直自动滚动。如果我只想在QTableView中禁用水平AUTO滚动怎么办?

提前谢谢。

2 个答案:

答案 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的值来获得最佳的垂直方向自动滚动。