2013-08-15 5 views
4

클래스의 멤버 값을 업데이트하기 위해 신호/슬롯 상호 작용을 설계 할 때 가장 좋은 방법으로 고려할 사항은 무엇입니까?값 신호/슬롯을 업데이트하는 QT에 대한 유용한 정보

는 예를 들어, UI에 표시되는 멤버 변수를 고려한다. 사용자가 UI의 값을 변경합니다. 멤버 변수 업데이트 기능을 통해 멤버 변수를 자동으로 업데이트하는 신호/슬롯 관계가 있습니다.

는 또한 멤버 변수 변경 UI가 자동으로 업데이트 할 수 있으므로, 신호/슬롯 관계는 다른 방법이있다. 업데이트 함수를 통해 멤버 변수를 업데이트하면 신호가 UI를 업데이트하도록 트리거합니다.

어떻게 이러한 순환을 방지합니까? 멤버 변수 업데이트 함수가 호출 될 때 현재 값과 비교하여 새 값을 확인하는 것만 큼 간단하고 차이가있을 경우 UI를 업데이트하는 신호 만 보내면됩니까? 이 일을 더 우아한 방법은

또는 ...이?

+0

아마도 Q_PROPERTY 및 NOTIFY를 고려해야합니다. – lpapp

답변

6

당신은 어떻게이되고 원형을 방지합니까? 멤버 변수 업데이트 함수가 호출 될 때 현재 값과 비교하여 새 값을 확인하는 것만 큼 간단하고 차이가있을 경우 UI를 업데이트하는 신호 만 보냅니 까?

예.

실제로 말하자면 QDial, QSpinBox 및 QSlider를 연결하여 무한 루프를 막기 위해 추가 마법을 요구하지 않고도 동기화 상태를 유지할 수 있습니다.

의미 적으로 말해서, 당신은 값이 변경 값이라고 전형적인 신호가을 변경 것으로 나타났습니다?

void myClass::setValue(int value) { 
    if (m_value != value) { 
     m_value = value; 
     emit valueChanged(value); // YES, THE VALUE *DID* CHANGE! 
    } 
} 

그것은 당신이 현재에 값을 설정하려고하면 어떻게 무엇 값의 변화가 존재하지 않는 경우는 신호가 방출되지 않아야 함을 의미한다 - 직접 설정하여, 또는를 통해 하나 신호/슬롯 호출.