当我在QScrollArea中滚动一个小部件时,其滚动条的步骤不是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);
}
如果你不介意调整所有鼠标滚轮滚动,你可以设置:
QApplication::setWheelScrollLines(1);