2014-10-14 1 views
3

QSpinBox이 있다고 가정 해 봅시다. 값이 사용자 또는 다른 기능에서 수동으로 변경되었는지 어떻게 알 수 있습니까?QscinBox가 사용자에 의해 변경된 경우 Qt를 확인하십시오.

편집 : 사용자가 값을 변경할 때만 일부 작업을 수행하고 싶지만 프로그램이 (setValue) 작업을 수행하면이 작업을 수행하지 않을 것입니다.

+0

몇 가지 해결책이 있지만 설명이 필요합니다. 사용자가 값을 변경할 때만 일부 작업을 원하지만 프로그램에서 수행하는 경우 (예 : setValue)이 작업을 수행하지 않으려합니다. – Chernobyl

+0

편집을 보았습니다. 이제 제 대답을 게시 할 수 있습니다. 확인해주세요. – Chernobyl

답변

8

가능한 해결 방법 :이 경우

ui->spinBox->blockSignals(true); 
ui->spinBox->setValue(50); 
ui->spinBox->blockSignals(false); 

는 신호는 그래서 모든 당신이 valueChanged() 신호에 의해 잡을 수있는 유일한 사용자의 작업입니다, 방출되지 않습니다. 예를 들어

:

void MainWindow::on_spinBox_valueChanged(int arg1) 
{ 
    qDebug() << "called"; 
} 

사용자 변경 값이 키 자판으로 마우스 나 종류에 따라, 당신은 "called"를 볼 수 있지만, 당신은 setValue 신호를 차단하여, 당신은 볼 수 없습니다 "called".

또 다른 접근법은 bool 변수를 제공하고 setValue 앞에 true으로 설정하고이 변수를 슬롯에서 확인하는 것입니다. false (사용자 작업) 인 경우 -하지 않을 경우 일부 작업을 수행하십시오 (bool을 false로 변경). 장점 : 신호를 차단하지 마십시오. 단점 : 슬롯이 여러 번 호출되는 경우 하드 코딩이 가능한 코드 일 수 있으므로 많은 시간을 할애하여 불필요한 검사를 수행합니다.

+0

일반적으로 입력 관련 QWidgets에는 사용자 대 프로그램 적 가치 설정에 대한 규칙이 없습니다 ... – Troyseph

관련 문제