【问题标题】:QT4: Is it possible to make a QListView scroll smoothly?QT4:是否可以使 QListView 平滑滚动?
【发布时间】:2011-01-02 05:54:15
【问题描述】:

我有一个图标模式的 QListView 有很多图标,所以会出现一个滚动条,但是滚动不流畅,这个恕我直言,因为它在每次滚动时突然从一个点跳到另一个点,所以让用户感到困惑。我想让滚动平滑,但我在文档中没有找到任何内容。有可能吗?

【问题讨论】:

    标签: qt qt4 pyqt4


    【解决方案1】:

    我在 ui->barra_scroll 中有一个 QlistWidget*,对此我感觉非常流畅。

    QScrollBar *qsb = ui->barra_scroll->verticalScrollBar();
    qsb->setSingleStep(5);
    

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,您想重新定义小部件的滚动行为。我猜发生的情况是,每当用户点击滚动箭头(在下图中标记为 b)时,listview 都会按项目的高度滚动。

      对于连接到列表视图的垂直滚动条,滚动箭头通常将当前位置向上或向下移动一“行”,并少量调整滑块的位置。我相信在这种情况下它是一个图标的高度。您可以通过安装和item delegate (setItemDelegate) 并覆盖其 sizeHint 方法来调整项目高度。虽然这不会帮助你解决这个问题。您可以尝试创建一个 QListView 后代并覆盖其 updateGeometries 方法。在那里,您可以将垂直滚动条步骤设置为您想要的值,我猜这个任务是 1 或 2。下面是自定义列表视图的示例:

      class TestListView : public QListView
      {
      Q_OBJECT
      public:
          explicit TestListView(QWidget *parent = 0);
      
      protected:
          virtual void updateGeometries();
      };
      
      TestListView::TestListView(QWidget *parent) :
          QListView(parent)
      {
          //???
      }
      
      void TestListView::updateGeometries()
      {
          QListView::updateGeometries();
          verticalScrollBar()->setSingleStep(2);
      }
      

      希望这会有所帮助,问候

      【讨论】:

      • 有趣。我很快就会试试这个。谢谢!
      【解决方案3】:

      【讨论】:

      • 这似乎是正确的属性,但它不起作用。它像以前一样滚动。
      • 我认为这是实现平滑滚动的最简单方法,它对我有用
      • 这似乎是正确的属性,但我无法让它正常工作。有没有人有任何解决方案?它似乎在发挥作用verticalScrollBar()->singlestep()
      • _my_listview->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); 工作得非常好。通过拖动栏本身进行滚动现在很流畅。使用 Scrollwheel 它仍然会跳转一些项目。
      猜你喜欢
      • 2011-10-25
      • 2020-02-22
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      相关资源
      最近更新 更多