実装例

今回はズーム(%)のスライダーを想定した例です。 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));
        });