実装例
今回はズーム(%)のスライダーを想定した例です。 10~800%まで対応
1. スライダー設定
QSlider *slider = new QSlider(Qt::Horizontal);
slider->setRange(-1000, 1000);
slider->setValue(0); // 中央 = 100%
slider->setSingleStep(1);
slider->setPageStep(50);
2. 対数変換関数
static double sliderToZoom(int v)
{
// v=-1000 → 0.1
// v=0 → 1.0
// v=1000 → 8.0
const double minZoom = 0.1;
const double maxZoom = 8.0;
if (v >= 0) {
return std::pow(maxZoom, v / 1000.0);
} else {
return std::pow(minZoom, -v / 1000.0);
}
}
3. 表示(%)に変換
connect(slider, &QSlider::valueChanged, this,
[label](int v) {
double zoom = sliderToZoom(v);
int percent = qRound(zoom * 100);
label->setText(QString("%1%").arg(percent));
});