【问题标题】:Disable horizontal scrolling in QScrollArea completely, not just the bars完全禁用 QScrollArea 中的水平滚动,而不仅仅是条
【发布时间】:2012-10-18 14:05:11
【问题描述】:

在 Qt 中,我有一个 QScrollArea,其中包含一些可以垂直滚动的内容,但绝不应该允许水平滚动。即使我禁用了 H 滚动条的显示,具有支持水平运动的滚轮(或触摸板)的鼠标也会使其左右移动一点。

现在,这可能部分是布局问题...但实际上屏幕上没有任何内容。 这可能是一种逃避,但有没有办法从后面“锁定”滚动区域,完全可以水平移动?

【问题讨论】:

    标签: c++ qt user-interface scroll


    【解决方案1】:
    scrollArea->verticalScrollBar()->setEnabled(false);
    scrollArea->horizontalScrollBar()->setEnabled(false);
    

    【讨论】:

    • 哇,效果很好!比覆盖事件简单得多。通过该方法禁用垂直滚动条甚至允许鼠标滚轮移动水平滚动条。
    • 你能帮我理解 -> 符号吗?我不确定如何在我的代码中使用此解决方案。谢谢self.list_widget_left.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.list_widget_left.horizo​​ntalScrollBar.setEnabled(false)
    • @winteralfs,因为这个问题标有 C++ 标签,所以代码是 C++。但是这个箭头 '->' 相当于一个点 '.'在 Python 中。 self.scrollArea.horizo​​ntalScrollBar().setEnabled(False)
    • 我会说这是一个更好的答案候选者,尽管这个问题现在已经有 9 年了。这是一个很好的解决方案。
    【解决方案2】:

    对于您的QScrollArea,您需要在eventFilter 方法中过滤QEvent::Wheel 或重载wheelEvent(QWheelEvent* event) 方法。

    另一种方法是创建从QWidget 继承的小部件,仅重载eventFilter,并将其过滤器应用于您的滚动区域:

    scrollArea->viewport()->installEventFilter(someFilterWidget);
    

    【讨论】:

      【解决方案3】:

      您是否尝试设置滚动条策略?

      myScrollArea->setHorizo​​ntalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

      http://qt-project.org/doc/qt-4.8/qabstractscrollarea.html#horizontalScrollBarPolicy-prop

      【讨论】:

      • 是的,我已经这样做了。所做的只是隐藏滚动条。但是你仍然可以用鼠标滚动。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多