문제

할 때 쓰는 Gui,나는 자주 와서 다음과 같은 문제는:하고 있어야 합 모델 컨트롤러입니다.컨트롤러는 위젯 W 을 표시하는 데 사용되는 재산 X 의 모델입니다.

기 때문에 모델을 변경 될 수 있습니다 외부에서 컨트롤러(수 있는 다른 컨트롤러를 사용하여 동일한 모델을 취소 운영 등)컨트롤러는 수신을 변화 모델입니다.컨트롤러 또한 듣는 이벤트에 위젯 W 업데이트 호텔 X 니다.

이제 다음과 같은 결과가 나타납니다:

  1. 에서 값 W 변경
  2. 이벤트가 생성되,처리기에 컨트롤러 가 호출됩
  3. 컨트롤러 세트에 새로운 값 X모델
  4. 모델 을 방출하기 때문에 사건이 변경되었습니다
  5. 컨트롤러 을 받는 변경에서 이벤트 모델
  6. 컨트롤러 의 값을 가져옵 X 설정에서 위젯
  7. goto1.

거기에 몇 가지 가능한 솔루션을 제공한다:

  1. 정 컨트롤러를 설정하는 깃발을 할 때 모델을 업데이트와 반응하지 않는 모든 이벤트에서는 모델에서는 경우 이 플래그 세트입니다.
  2. Disconnect 컨트롤러(또는 말의 모델을 보내지 않는 모든 이벤트에 대한 몇 가지 시간)
  3. 동결에서 진행되는 모든 업데이트를 위젯

과거에는,일반적으로 갔을 위한 옵션을 1., 기 때문에 그것의 가장 간단한 일이다.그것은의 단점을 복잡하는 클래스 플래그와 함께,그러나 다른 방법이 자신의 단점을 가지고 있고,너무입니다.

한,이 문제를 여러 GUI 툴킷을 포함하여,GTK+,Qt 및 SWT,그래서 나는 꽤 toolkit-지를 원활하게 관리할 수 있습니다.

어떤 모범 사례를 따라야 합니까?또는 건축용 단순히 잘못입니까?

@부끄러워:는 솔루션을 위한 어떤 경우에,하지만 당신은 여전히 당신의 라운드를 얻을 불필요한 이벤트는 경우 X 에서 변경된 외부 컨트롤러(예를 들어,명령을 사용하면 패턴/취소),기 때문에 그 가치가 변경되었, W 입 업데이트 및 이벤트를 실행.을 방지하기 위해서는 또 다른(쓸모)업데이트 모델에는 이벤트에 의해 생성되는 위젯을 삼켰습니다.
다른 경우에,모델 수 있습니다 더 복잡하고 간편 체크에서 정확히 무엇인가 변경되지 않을 수도 있습 가능한 것으로,예를 들어,복잡한 나무 보기입니다.

도움이 되었습니까?

해결책

일반적으로 대처해야 합를 입력 이벤트에 위젯을 변경하지 않는 이벤트입니다.이렇게 하면 이 유형의 루프에서 발생하는.

  1. 사용자가 변경 입력에 위젯
  2. 위젯을 방출하는 이벤트 변경(크롤/를 입력 클릭/마우스를 떠나,etc.)
  3. 컨트롤러 응답,변환경에서의 모델
  4. 모델출 이벤트
  5. 컨트롤러 응답의 변화 값에 위젯
  6. 값 변경 이벤트에 방출되는,하지만 듣고에 의해 컨트롤러

다른 팁

표준 QT 을 다루는 방법이고 또한 하나 제안서는 그들의 매우 유용한 튜토리얼을 변경하는 값에서 컨트롤러는 경우에만 새로운 값이 다르에서 현재 값입니다.
이 방법은 신호의 의미 valueChanged()

이 튜토리얼

플래그를 나타내 updaing 작동합니다.할 수 있는 포장에서 그들과 같은 방법 BeginUpdate 및 EndUpdate.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top