0

您好第一次在这里发帖。我搜索并发现重新实现 QSpinBox 类如何允许自定义使用。但是,我不确定我的需求是否与我通过重新实现 validate 方法所发现的一样多。

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

4

2 回答 2

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...
}

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

于 2013-08-21T12:57:08.260 回答
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();
}

抱歉,如果我搞砸了格式。

于 2013-08-21T20:29:38.153 回答