如何为QSpinBox执行自定义范围

时间:2013-08-21 12:26:48

标签: qt qspinbox

你好第一次在这里发帖。我搜索并发现重新实现QSpinBox类如何允许自定义用途。但是,我不确定我的需求是否与我通过重新实现验证方法所发现的内容一样得到解决。

我需要一个自定义范围,它排除值范围内的零值。微调器用于选择加载图像的缩放比例。设计时的初始范围是-25到10.该范围可能会根据图像的尺寸而改变。然而,我必须能够“跳过”零以获得所需的缩放系数。例如,范围必须始终从-1到1,反之亦然。

2 个答案:

答案 0 :(得分:1)

我假设您正在收听QSpinbox::valueChanged(int i)信号,您可以执行以下操作:

void zoomImage(int i) {
   if (i == 0) {
      if (lastValue < 0)      //if sliding from negative values
         spinBox->setValue(1);
      else
         spinBox->setValue(-1);

      return;                  //skip processing for 0
   }
   else
      lastValue = i;           //save last state to a class variable

   //processing...
}

编辑:int lastValue用于在滑块到达0之前存储滑块的位置,以确定用户是否滑动到负值或正值

答案 1 :(得分:0)

似乎有效:

void MainWindow::zoomImage(int ctlValue)
{
   if(ctlValue == 0)
   {
     if(zoomLastValue < 0)
        ui->sbScaleImage->stepBy(1);
     else
        ui->sbScaleImage->stepBy(-1);
   }

   zoomLastValue = ui->sbScaleImage->value();
}

如果我搞砸了格式,请道歉。