[英]How to call changeValue of QSpinBox only when user changed value
[英]Qt find out if QSpinBox was changed by user
假設我有一個QSpinBox
,我怎么能看出這個值是從用戶還是從其他函數手動更改的?
編輯:我只想在用戶更改值時執行某些操作,但如果您的程序執行此操作(setValue),我不想執行此操作。
可能的方法:
ui->spinBox->blockSignals(true);
ui->spinBox->setValue(50);
ui->spinBox->blockSignals(false);
在這種情況下,不會發出信號,因此valueChanged()
信號所能捕獲的只是用戶的操作。
例如:
void MainWindow::on_spinBox_valueChanged(int arg1)
{
qDebug() << "called";
}
當用戶改變值通過鼠標或通過類型keybord,你看"called"
,但是當你setValue
與阻塞信號,看不到"called"
。
另一種方法是提供一些bool變量並在setValue
之前將其設置為true
並在槽中檢查此變量。 如果是假(用戶操作) - 執行某些操作,如果不是 - 請不要執行操作(將bool更改為false)。 優點:你不會阻擋信號。 缺點:可能是難以讀取的代碼,如果插槽調用很多次,您將多次進行這種不必要的檢查。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.