문제

서로 메시지를 보내는 두 가지 프로세스가 있습니다. 프로세스 A는 프로세스 B에 메시지를 보내는 일반 (예 : 비 QT) 프로그램입니다. 프로세스 B는 수신 된 메시지를 텍스트 상자에 표시하는 QT GUI 응용 프로그램입니다.

qplaintextedit에서 상속하는 사용자 정의 위젯 (showmessages)을 만들고 타이머가 만료 될 때 파이프에서 메시지를 읽고 텍스트 상자에 추가합니다. 코드는 실제로 이와 같이 설계되지 않았습니다 (내가 생각하는 디자인은 꽤 나쁜 디자인 일 것입니다). 내가 말하지 않는 이유로, QT-Designer를 사용하여 양식을 작성하는 동안 프로세스 A를 종료 할 수 없습니다.

문제는 QT 디자이너를 사용하는 동안 (따라서 ShowMessages 위젯을 선택하고 창 안에 넣음) 위젯이 디자이너에 있더라도 메시지를 표시하기 시작한다는 것입니다. 이 기능은 멋지지만 문제는 양식을 저장하면 이미 제시된 메시지가 .UI 파일에 저장되어 프로세스 B를 시작할 때 동작이 잘못되었다는 것입니다 (프로세스가 생성 단계에서받은 메시지를 표시하기 시작하기 때문에). .

프로세스 B가 시작된 직후에 텍스트 상자를 정리할 수 있지만 .UI 파일에 메시지를 피하는 것이 훨씬 좋습니다. 내가 원하는 것은 위젯에 대해 이와 같은 코드를 쓸 수 있다는 것입니다.

if <I'm not in the designer>
    timer = QtCore.QTimer(self)
    QtCore.QObject.connect(timer, QtCore.SIGNAL("timeout()"), self, QtCore.SLOT("on_timer()"));
    timer.start(2000)

내가 디자이너에 있는지 알 수있는 QT 기능이 있습니까? 디자이너와 런타임 코드를 구별하는 것이 "나쁜"것이라고 생각하십니까?

(실수에 대해 죄송하지만 영어는 내 기본 언어가 아닙니다)

도움이 되었습니까?

해결책

위젯에는 "활성"인지 거짓으로 기본적으로 깃발이 있어야 할 수도 있습니다. 디자이너에있는 동안 아무것도하지 않습니다. 코드에서 메시지를보고 싶을 때 활성화로 설정합니다. 그런 다음 다른 시나리오에서도 끄는 기능도 있습니다.

그러나 나는 당신이 "컨트롤러"코드를 "보기"위젯에 넣는 것처럼 들립니다.이 위젯 (현재 QT 디자이너 문제 포함).

아직 MVC (Model-View-Controller) 디자인 패턴을 읽어 보지 못했습니다.

업데이트:

공정하게 말하면, 당신의 질문은 당신이 디자이너에 있는지 여부를 감지하는 방법을 물었습니다 :)

http://doc.trolltech.com/4.3/designer-creating-custom-widgets.html#creating-behaved-widgets

QT 디자이너의 사용자 정의 위젯에 특별한 동작을 제공하려면 QT 디자이너 특정 동작에 대한 위젯 구성 프로세스를 구성하기 위해 초기화 () 함수의 구현을 제공하십시오. 이 기능은 CreateWidget ()로 호출되기 전에 처음으로 호출되며 QT Designer가 플러그인의 CreateWidget () 함수를 호출 할 때 나중에 테스트 할 수있는 내부 플래그를 설정할 수 있습니다.

문서에 따르면, 기본적으로 위젯의 초기화 () 함수에서 "IndesignerFlag"를 true로 설정할 수 있습니다. 그런 다음 위젯의 코드에 필요한 경우 해당 플래그를 감지하십시오.

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