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);
}
当我滚动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);
}