Qt6のQSliderで対数スケールを行うには?

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

2026年1月8日