嗨,第一次在這裏發佈。我搜索並發現瞭如何重新實現QSpinBox類允許自定義使用。但是我不知道我的需求是否與重新實現驗證方法所發現的一樣多。如何爲QSpinBox自定義範圍
我需要一個自定義範圍,在值範圍內排除零值。微調器用於選擇加載圖像的縮放比率。設計時的初始範圍是-25到10.該範圍可能會根據圖像的尺寸而改變。儘管如此,我必須能夠爲所需的縮放因子「跳過」零。例如,範圍必須始終從-1到1,反之亦然。
在此先感謝。
嗨,第一次在這裏發佈。我搜索並發現瞭如何重新實現QSpinBox類允許自定義使用。但是我不知道我的需求是否與重新實現驗證方法所發現的一樣多。如何爲QSpinBox自定義範圍
我需要一個自定義範圍,在值範圍內排除零值。微調器用於選擇加載圖像的縮放比率。設計時的初始範圍是-25到10.該範圍可能會根據圖像的尺寸而改變。儘管如此,我必須能夠爲所需的縮放因子「跳過」零。例如,範圍必須始終從-1到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之前用戶滑動到負或正值
感謝您的建議。你發佈了一個插槽的例子嗎?它具有與信號valueChanged(int i)相同的名稱和簽名。我正在使用該信號並從中調用一個槽(zoomImage(int))。這可能比重新實現QSpinBox方法更好(或者更簡單)。需要捕獲/緩存lastValue的手段 –
是的當然,這是一個插槽..您需要知道某種方式,用戶移動滑塊以便跳過0到-1或1的方向,所以我用lastValue來記住最後一個滑塊的位置可以達到0 – headsvk
有一個解決方案,我認爲但不能發佈一段時間,因爲我的地位在SO種姓系統。 –
什麼似乎已經奏效:
void MainWindow::zoomImage(int ctlValue)
{
if(ctlValue == 0)
{
if(zoomLastValue < 0)
ui->sbScaleImage->stepBy(1);
else
ui->sbScaleImage->stepBy(-1);
}
zoomLastValue = ui->sbScaleImage->value();
}
道歉,如果我搞砸了格式。
似乎跳過一些值的唯一方法是重新實現'stepBy'函數。 – fasked
似乎我可以直接調用stepBy,而不是通過重新實現。我將使用它,並附帶@headsvk提供的建議 –
我的意思是「唯一正確的方式」:)''QAbstractSpinBox'提供'stepBy'虛擬函數,就像您擁有的目標一樣。 – fasked