2012-04-16 5 views
1

나는 어느 쪽 MDI 또는 QDockwidget 기반 응용 프로그램에 포함해야 할 몇 가지 다른 QGlWidget 기반 디스플레이 위젯이있다. 하지만 내 디스플레이 위젯 (등 고정/최소화)를 MDI/선착장 특정 이벤트의 일부를 처리 할 필요가Qt는, 다중 상속, 래퍼 또는 이벤트 필터

옵션은 다음과 같습니다
곱하기 QGlWidget 및 QMdiSubWindow/QDockWidget에서 디스플레이 위젯을 상속합니다. 곱셈 상속 및 신호/슬롯과 관련된 문제가 있습니까?

QMdiSubWindow/QDock 파생 위젯 내에서 디스플레이를 캡슐화하지만 Mdi/Dock 래퍼 위젯에서 모든 디스플레이의 외부 함수를 래핑해야합니다. 나는 새 창을 만들 때, 임시 MDI/선착장 위젯을 만들고 여기에 디스플레이를 장착하고 표시하기 전에 디스플레이의 슬롯에 모두 특별한 신호를 연결

. 그러나 이것은 사건에 대해서는 효과가 없습니다. 나는 QGlWidget에 QMdiSubWindow/QDockWidget에게 특정 신호를 수신 할 수

일부 QSignalMapper 마법

+1

Qt는 동일한 객체에서 QObject를 두 번 상속하는 것을 지원하지 않으므로 QGIWidget이 QWidget의 하위 클래스라고 가정하면 첫 번째 옵션은 작동하지 않습니다. –

+0

@JeremyFriesner - 감사합니다. 나는 MainWindow를 메뉴/도구 모음 등이 그들을 호출 할 수 있도록 컨테이너 위젯의 각 displayWidget 기능을 래핑하는 것을 피하기 위해 기대했다 - 내가해야 할 것이라고 생각했던 거의이었다 t 작업 –

답변

1

MDI/도킹 위젯은 다른 위젯에 대한 용기 그렇게 표시 위젯을 자신의 기능을 혼합하는 것은 당신으로 아주 좋은 해결책이 아니다이다 컨테이너처럼 보이지만 아무것도 포함 할 수없는 끔찍한 하이브리드 위젯으로 끝납니다. Qt는 Jeremy가 지적한대로 허용하지 않습니다.

QGLWidget이 부모 컨테이너 (예 : 최소화, 도킹 등)에서 이벤트를 필요로하는 경우 왜 QGLWidget에 파트너 메소드를 생성하고 부모가 해당 작업을 수행 할 때마다 호출합니까?

+0

. 컨테이너는 여러 유형의 디스플레이를 보유 할 수 있기 때문에 포함 된 내용을 확인해야합니다. –

+0

흥미롭게도 dockwidget은 다르게 설계되었지만 모든 QWidget에서 상속받을 수 있으며 순수 컨테이너가 아닌 인터페이스 유형 클래스처럼 보입니다. –