2012-01-01 2 views
3

Qt 애플리케이션의 창을 관리하기위한 모범 사례 또는 디자인 패턴을 찾고 있습니다.Qt 애플리케이션에서 창을 관리하는 표준화 된 방법이 있습니까?

내가 무슨 뜻인지 설명하겠습니다. 몇 가지 창 (A, B, C)이있는 응용 프로그램이 있고 내에서 window A을 여는 것과 같은 필요성이 있고 새로운 window A 인스턴스가 호출 될 때마다 유효한 매개 변수가 만들어지고 마지막에 표시해야 할 때 만들어 지는지 확인하십시오. 창 C는 기존 인스턴스가 있으면 새 인스턴스를 만듭니다.

물론 실제 응용 프로그램은 훨씬 더 복잡하고 더 많은 창과 제한이 있으므로 코드 전체에 내 창 관리 작업을 분산시키고 싶지 않고 고정 된 WindowManager 클래스로 유지해야합니다. (사실이 클래스는 싱글 톤이지만 정적 클래스로 변경하려고합니다.)

WindowManager 클래스는 시스템의 각 윈도우에 대해 (개인) QSharedPointer을 보유하므로 코드의 아무 곳에서나 모든 윈도우를 쉽게 조작 할 수 있습니다. window X을 보여줄 필요가있을 때 WindowManager::showX(params)으로 전화하면 모든 코드가 검사되고 초기화됩니다. 또한 일부 로직을 처리하고 시스템 트레이 메시지를 표시 한 다음 창을 최소화하려면 WindowManager::minimizeX()과 같은 메소드가 있습니다.

일반적인 필요 사항입니까? 문제를 해결하는 일반적인 패턴이 있습니까? 어떻게 사람들이 응용 프로그램의 창을 관리합니까? 내가 한 일은 (정적 WindowManager 클래스) 받아 들일 수 있습니까?


편집 : 응용 프로그램은 시스템 트레이 응용 프로그램이므로 창 간에는 상위 하위 관계가 없습니다. 대신 그들은 모두 서로 독립적이며 일반적으로 사용자는 (글로벌) 단축키로 모든 창을 호출합니다. 그러나 창 안에 다른 것을 열어야하지만 여전히 부모와 자식이 될 수없는 경우가 있습니다.

+1

나는 이것처럼 뒤얽힌 것으로 무엇인가를 썼다고 말할 수 없다. 일반적으로 다양한 대화 상자가있는 기본 창, 필요에 따라 모달 또는 그렇지 않습니다. 특정 윈도우를 처리하는 코드는 해당 윈도우의 클래스로 들어갑니다. 창/대화 상자에 다른 대화 상자가 필요하면 대화 상자의 설정을 관리하지만 논리는 모두 보조 대화 상자의 클래스에 있습니다. 그 모델을 사용하지 못하게하는 것이 있습니까? – casualcoder

+0

일반적으로 부모는 자녀를두고 있습니다. 하위 위젯을 만들고, 구성하고, 표시합니다.메인 윈도우가있는 경우, 메인 윈도우는 종종 많은 보조 윈도우를 처리합니다. 그 많은 코드를 창 생성과 관리에 전념하는 별도의 클래스로 분해 할 수 있다는 것을 알지 못한다. 좋은 디자인이 될 것이다. –

+0

@casualcoder : 실제로 내 응용 프로그램은 대부분 시스템 시간에 시스템 트레이에 있으며 사용자는 다른 (글로벌) 단축키별로 다른 창을 트리거하며 창 간에는 상위 - 하위 관계가 없습니다. 창은 다른 창에서 호출하거나 단축키로 열 수 있습니다. 그것은 저에게 그런 질문을합니다. – destan

답변

0

아직 간단한 답변이 없으므로 하루 하루 문제로 간단한 질문입니다. 이것은 코멘트가 너무 길어서 답으로 게시 할 것이지만, 여전히 궁극적 인 일반적인 깨달음 패턴을 게시하기를 바란다;) 나는 내가 항상 맞는 일반적인 패턴을 갖고 싶다.

어쨌든, 모든 윈도우 사이에 매우 강한 결합이 만들어지기 때문에 모든 것을 WindowManager "singleton"에 넣지는 않습니다. 이 클래스는 모든 복잡한 규칙을 포함하고 있기 때문에 매우 커질 수 있습니다 ("실제 응용 프로그램"이라고합니다 - 단일 클래스로 처리되는 100 개의 창을 상상해보십시오). 한 부분의 변경이 실수로 다른 부분에 영향을 미칠 수 있기 때문에 테스트 및 오류가 발생하기 쉽지 않을 수 있습니다 (다섯 개의 창에 사용되는 부울을 상상해보십시오. 이상이 생기면 4 개로 작동 할 수 있습니다). WindowManager 클래스가 필요하기 때문에 (다른 프로그램이나 다른 프로그램과 같이) 특정 창을 다른 곳에서 재사용하지 못하게 할 수 있습니다. WindowManager 클래스가 필요하므로 다른 창을 모두 사용해야하므로 이동할 수 없습니다. 이 다른 창은 다른 모든 창을 끌기 때문에 다른 곳으로 가야합니다.

나는 논리 그룹의 창을 만들고 여러 개의 작은 컨트롤러와의 상호 작용을 처리하려고합니다. 어쩌면 MVC 패턴을 들여다 볼 수도 있습니다. 컨트롤러가 모델을 조작하는 방법과 사용자 입력에 따라 어떤 뷰를 표시할지 결정하게하십시오.

관련 문제