QT와 멀티 윈도우를위한 간단한 인터페이스 관리자를 구축

2008년 1월 24일 ·에 게시된 C / C + + , Qt는

여러 번 나는 그래픽 또는 텍스트 모드에 관계없이 여러 화면과 유지 보수 시스템 인터페이스를 제공하는 데 결국. 종종 화면의 숫자는 항상 애매한 통화, # ifndefs, 스위치 및 기타 괴물의 엉키는게 이끌 사전 계획없이 시스템과 함께 성장했습니다.

제가 늦게처럼 게임의 첫 번째 버전을 짓을 때, 성별의 문제를 마주 쳤 처음이었다 Elifoot CEFETES에서 공정한합니다. 당시 나는 그들이 서로 전화 목표가 된 경우에만 반환 함수의 집합을 발견 했어. 결과 : 거기 쌓아! (이 새 버전에서 수정되었습니다 걱정하지 마세요!)

멀티 윈도우와 인터페이스의 경우, 및 계획 - 더 - 플라이에서 발생하는 시스템에서, 파괴와 공포의 흔적을 남기는에 창문 등등를 닫기 전에 다른 창을 불러 창문을 가지고 일반적입니다. 날 믿어, 혹시 같은 rapp의 유지를 이어받기를 원하지 않습니다.

먼지는 먼지로 ...

내 경우엔, resovi 인터페이스 관리자를 만들어 문제. 인터페이스 개체의 생성 및 파괴를 제어하는​​ 중앙 개체입니다. 각 개체는 자신의 작업 관리자에 대한 신호를 완료하고 그 난장판을 청소 담당한다. 따라서 객체가 태어난 때마다, 죽으 앞으로 프로그램의 제어를 통과하지 않고는 작업을 수행, 항상 관리자로 돌아옵니다.

제가 관리자가 객체를 파괴할 것이라고 말하지 않습니다,하지만 청소를 할 것입니다. 각 개체에는 관리자에게 그 중 하나를 성공적으로 또는 실패, 완료 때마다 경고를하기 위해 건설되어야한다. 종종 개체 자체는 "죽이기"와 혼자 매우 유용합니다, 작업 관리자의 일부를 복용하지만, 통제할 수 있습니다.

시작하기 전에

나는이 간단한 게시물에 모든 Qt의 기능이나 관리 인터페이스의 모든 측면을 다루고 있다고 주장하지 않습니다. 내가 한하는 문제를 해결하는 방법에 대해 이야기 하​​려고요. 이 게시물은 또한 그런 파인애플 보지에왔다 친구 파울로 - 리우데 자네이루에 공물이다!

핸즈 - 온

나는, 대부분의 경우, 프로그래머 상향식지만, 하향식 분석. 이것은 혼란 보일지도 모르지만, 거의 겁먹을 이유도 없다, 아니면 ...

객체가 메시지를 교환해야합니다. 이를 위해, 시스템 신호 슬롯 Qt는 큰 도움이 될 것입니다. 개체가 신호를 ((신호) 방출)를 보내는 것이며, 관리자 (슬롯 ()) 그들이하는 말 것입니다.

놀랍게도 지금 UIM이라는부터 매니저 빌더, 코드의 한 라인을 가지고 있지 않습니다. 그것은 단지 편집증 (또는 안)에 0으로 포인터를 초기화 ...

UIM는 객체를 생성하고 난장판을 청소 슬롯을 구현합니다. 당신이 개체를 만들 때, UIM은 각각의 슬롯 청소에이 개체를 연결합니다. 객체가 죽으면, 그것은 UIM의 청소 슬롯을 활성화한다. 슬롯이 예제에서 객체 그래프 메인 메뉴, 윈도우의 생성으로 연결됩니다.

다른 개체들은 결국 마케팅이 중요, 자신 (약) 할 얘기가 작은 창, 대화 상자, 응용 프로그램 구성에 대해 한 두가 ...

모든 그래픽 객체는 저는 클릭하고 Qt 디자이너를 끌고하고 내 갈길을 조정. 모든 예술 작품 아니다 후에 아무것도 아냐, 손에 픽셀을 정렬되지하는 것은 개념의 증거입니다.

그래픽 객체

설치 화면이 매개 변수의 목록은 위젯 페이지로 전달되는 콤보 박스로 일반 대화 상자입니다. 제가 Qt 디자이너에서 생성한 코드를 추가한 내용은 관리자로 선택된 데이터를 전송하기 위해 소멸자, 그리고 한 쌍의 신호 슬롯이 있습니다. 저는 현재 구성을 추적 유지 귀찮게하지 않았다. 이 채팅은 다른 게시물입니다.

abouts은 기본적으로 동일한 코드 플러스 destructors 있었다.

메인 창은 다른 창과 점멸되는 사각형의 위젯 미친 전체를 호출하는 메뉴가 있습니다. 네모는 창 구성을 변경합니다 정보의 금액입니다.

매직 QT

수업은 QWidget 클래스에서 상속하기 때문에 사용된 모든 그래픽 객체는 또한 QWidgets 있고, 나는 각 상속된 메서드에서 다음과 같은 생성자를 사용합니다 :

  이 -> setAttribute (Qt는 :: WA_DeleteOnClose 사실); 

에 따르면 온라인 문서 , 이건가 닫힐 때 위젯을 삭제해야한다는 Qt는을 알려줍니다. 그렇지 않으면, 그것은 단지 숨겨져 있습니다.

"... 위젯은 가까운 이벤트를 허용하면 숨겨진가 ..."

당신이 그것을 닫을 때 위젯이 삭제하길 원한다면, "...의 Qt와 함께 만들 :: 플래그를 WA_DeleteOnClose. 이것은 다중 윈도우 응용 프로그램에서 독립적인 최상위 윈도우에 매우 유용합니다 ... "

등의 취소 또는 닫기를 클릭 등 실패,에 객체 엔드를 만드는 안무는 직접 자체 슬롯 주변 ()에 연결되어 있습니다. 이것은 객체의 파괴로 절정에 달하다되는 이벤트의 시리즈를 트리거합니다.

객체가 루틴은 UIM로 돌아가려면 이동했다, 그러한 확인을 클릭하고 데이터를 보내는 것처럼 성공적으로 완료, 그래서 경로들을 수 있습니다. 데이터를 받고 나면 UIM 슬롯 직접 개체의 닫기 ()를 호출합니다.

개체가 파괴되면, 그의 마지막 숨을 말, (파괴 기호)를 보냅니다. 말 그대로 그는 "나는 대단!"으악.

"외부"개체에서 UIM은 일상적인 청소 및 TADÃM이 신호를 연결 듣고있다! 준비.

제가 사용한 예제에서는 화면에서 사각형의 크기는 물체의 MyConf갑니다, UIM은 MyApplication으로 라우팅됩니다 통과. 이 전달 그것 미친 내부 위젯에 차례 인치

작은 창이 열립니다하면서 더욱 흥미로운 얻으려면 도구 해치를 닫을 때 반환, 깜박임을 중지합니다. 그것은 바보 같이 들리겠지만 그것은 바로 UIM 전체 제어 sobreo 그녀가 초점이 아닌 동안 무엇인지, 각 윈도우에서 일어나는 있다고 표시했습니다.

결론

QT 프레임 워크는 엄청난이며 거대한 범위의 기능을 제공합니다. 하나는 객체가 파괴되는 방식을 제어할 수 있습니다. 약간의 계획과 함께 시그널 - 슬롯 시스템과 이것을 함께 사용하면으로 선회하지 않고, 매우 복잡한 인터페이스를 구축할 수 Tarrasque 유지하는 시간.

출처 :

http://doc.trolltech.com

추신 : 완전한 소스 코드 예제가 GPL하에이를 통해 다운로드받을 수 있습니다 링크 . 언젠가 나는 그것에 코멘트를 넣어 ...

BUGFIX

불행한 곤충은 클래스 생성자 MySquares의 초기화 속성의 부재에 숨겼다. '세그먼트화 오류'를 초래하기 때문에 애완 동물은 작은가, 독성, 었 지만요. 난 어디에 대한 있었고, 닫힌 경우, 프로그램을 시작하면 화면이 이미 제대로 구성되었다는 가정을 막아야 이벤트의 시퀀스를 쐈어. 수정 코드는 위의 링크에서, 그리고 기억하세요 :

"항상 변수를 초기화"

댓글

  • 페르난도

    아주 좋습니다 ...하지만, 나는 이런 경우를 볼 수있게 되서 인상을 가지고 왜 그런지는 잘 모르겠지만 ...
    한가지 물어, 창문이 Q 3 다른 속도에서 돌고있는 빨간 공을 가지고다면 어떻게 할 것이라고 그랬어요?!

  • 페르난도

    아주 좋습니다 ...하지만, 나는 이런 경우를 볼 수있게 되서 인상을 가지고 왜 그런지는 잘 모르겠지만 ...
    한가지 물어, 창문이 Q 3 다른 속도에서 돌고있는 빨간 공을 가지고다면 어떻게 할 것이라고 그랬어요?!

  • Blabos

    레드 도트? 세 가지 속도?
    어느 아이디어는 무엇이 ...
    하지만 아마 TPM을 사용한다 :
    정신 감응
    예고
    기적

  • Blabos

    레드 도트? 세 가지 속도?
    어느 아이디어는 무엇이 ...
    하지만 아마 TPM을 사용한다 :

    정신 감응
    예고
    기적

  • 페르난도

    당신은 TPM을 사용하는 경우에는 Q를, 그렇다면 우리가 APT w있다 / 이렇게 ... 우리는 많은에게이 세 가지 전제 조건을 사용한 적이 ...

  • 페르난도

    당신은 TPM을 사용하는 경우에는 Q를, 그렇다면 우리가 APT w있다 / 이렇게 ... 우리는 많은에게이 세 가지 전제 조건을 사용한 적이 ...

  • 마르셀로 Ossamu 혼다

    여보세요
    세 개의 볼을 당신이 세 가지 타이머 및 제어 및 / 필요하거나 당신이 그들에게 보여주고 싶은 방법 중 하나 (예 : OpenGL을) 페인트 이벤트를 동기화 게요 다른 속도로 회전하게합니다.
    포옹

  • 마르셀로 Ossamu 혼다

    여보세요
    세 개의 볼을 당신이 세 가지 타이머 및 제어 및 / 필요하거나 당신이 그들에게 보여주고 싶은 방법 중 하나 (예 : OpenGL을) 페인트 이벤트를 동기화 게요 다른 속도로 회전하게합니다.
    포옹

  • Blabos

    ;)

  • Blabos

    ;)

  • 플라 비오

    나는 qo Marcelo는 이해할 수가 없었어요 .. 좋아요, 악몽을 살았던 사람 ... 난 프로젝트 매니저 그가 모두 잘 외부인이 너무 이해가 안가 원하는 걸 이해한다면이 프로젝트, 우리가 무슨 말을하는지 이야기를 KKKKKKKK
    그것은 공의 텍스트를 표시했지만, 나의 제안 현재 Qt는 제품 새내기를위한 텍스트를 만들 것이라고 적어!

  • 플라 비오

    나는 qo Marcelo는 이해할 수가 없었어요 .. 좋아요, 악몽을 살았던 사람 ... 난 프로젝트 매니저 그가 모두 잘 외부인이 너무 이해가 안가 원하는 걸 이해한다면이 프로젝트, 우리가 무슨 말을하는지 이야기를 KKKKKKKK
    그것은 공의 텍스트를 표시했지만, 나의 제안 현재 Qt는 제품 새내기를위한 텍스트를 만들 것이라고 적어!

Disqus에 의해 전원 블로그 덧글