2020年6月30日 星期二

在 Slider 使用 float 數值

在 Slider 使用 float 數值

前言

  在前一篇 Slider 的基本應用 裡說明了 Slider 的基本應用,但 Slider 的數值是用 Integer (整數),作為數值來儲存,如果需要用到 float 或 double 這種帶有小數的數值該如何解決呢?

內容

  先到 [ GitLab ] HelloQt 下載範例,這次應用的專案路徑
(HelloQt' directory)/Slider/FloatValue,範例執行的結果如下
範例的執行結果

左側的 Slider 是以 float 為數值,範圍在 0 ~ 10 ,右側的 Slider 是以 double 為數值,範圍在 -10 ~ 10,接著看程式的部分,看到 MainWindow::MainWindow() ,程式碼如下
  //
  float value1 = 5.0f;
  ui->horizontalSlider->setValue( value1 * 10.0f );
  ui->label1->setText( QString::number( 0.1f * ui->horizontalSlider->value() ) );
  //
  double value2 = 0.0f;
  ui->verticalSlider->setValue( value2 * 100.0 );
  ui->label2->setText( QString::number( 0.01 * ui->verticalSlider->value() ) );
  //
  connect( ui->horizontalSlider , &QSlider::valueChanged , this , &MainWindow::onHorizontalSliderValueChanged );
  connect( ui->verticalSlider , &QSlider::valueChanged , this , &MainWindow::onVerticalSliderValueChanged );

在開頭的 value1 是一個 float 的數值,當要把 float 的數值設定到 Slider 的時候先乘上 10.0f ,接著同步的 Label 是將 Slider 的數值乘上 0.1f  ,如果在設計介面看到該 Slider 的值域會是 0 ~ 100 ,如下圖
左側 Slider 的值域

利用乘上 10.0f 來把值域從 0 ~ 10 變成 0 ~ 100 ,在取 Slider 的數值的時候,要在將值域 0 ~ 100 變成 0 ~ 10 ,所以要乘上 0.1f  , double 的用法也可以這樣用,要注意的是這個方法會有精度的問題,左側的 Slider 無法拉出像是 5.57 這樣的數值,因為精度只到 0.1,右側的 Slider 的精度則是 0.01 。

參考資料

[ doc.qt.io ] QSlider Class

相關文章與資料

[ GitLab ] HelloQt
Slider 的基本應用

沒有留言:

張貼留言