QScrollBar singleStep 与其实际步长不同

QScrollBar singleStep is different from its actual step

当我滚动QScrollArea中的一个widget时,它的滚动条的步长不是singleStep()而是singleStep() * 3。

我将 QScrollArea 的 verticalScrollBar() 的 singleStep 设置为 30,以便每次滚动滚动 30,但它每次滚动滚动 90。

MyScrollArea::MyScrollArea(QWidget* parent) : QScrollArea(parent) {
    this->verticalScrollBar()->setSingleStep(30); // set singleStep to 30

    connect(this->verticalScrollBar(), SIGNAL(valueChanged(int)),
            this, SLOT(on_valuechange(int)));
}

MyScrollArea::on_valuechange(int i) {
    qDebug() << i;  // always 90n, not 30n
}

或者这只是我鼠标的问题?

如评论中所述,您的单步乘以系统的行数。

如果您想在较少的系统设置中使用相同的滚动步骤,您总是相应地调整步骤。例如,对于 Windows:

#include <winuser.h>
#include <QScrollBar>

void setSingleStep(QScrollBar* bar, int step) {
  UINT sys_steps;
  SystemParametersInfoA(SPI_GETWHEELSCROLLLINES, 0, &sys_steps, 0);

  bar->setSingleStep(step / sys_steps);
}