2012-04-16 39 views
1

我有幾個不同的基於QGlWidget的顯示小部件,我需要將它們嵌入到基於MDI或QDockwidget的應用程序中。但我需要處理一些MDI /碼頭特定事件在我的顯示窗口小部件(最小化/碼頭等)Qt,多重繼承,包裝器或事件過濾器

選項包括:
乘繼承QGLWidget來繪圖和QMdiSubWindow/QDockWidget顯示部件。任何與繼承和信號/插槽有關的問題?

將顯示封裝在QMdiSubWindow/QDock派生窗口小部件中,但隨後我必須將所有顯示的外部函數包裝在Mdi/Dock封裝窗口小部件中。

當我製作一個新窗口時,創建一個臨時的Mdi/Dock小部件,將所有特殊信號連接到顯示器上的插槽,然後將顯示器附加並顯示出來。但這不適用於事件。

一些QSignalMapper魔力在哪裏可以得到QMdiSubWindow/QDockWidget特定信號在QGLWidget來繪圖

+1

Qt不支持在同一個對象中兩次繼承QObject,所以假設QGIWidget是QWidget的一個子類,你的第一個選項是不會工作的... – 2012-04-17 05:28:51

+0

@JeremyFriesner - 謝謝, t工作 – 2012-04-17 15:43:32

回答

1

MDI /碼頭小部件容器的其他部件,所以與顯示部件混合他們的特點是不是一個很好的解決方案爲您最終形成一個看起來像一個容器的可怕的混合小部件 - 但不能包含任何東西。 Qt並不會像Jeremy所說的那樣允許它。

如果您的QGLWidget需要來自其父容器的事件(例如,最小化,停靠等),爲什麼不能在QGLWidget中爲它們創建合作伙伴方法,並在父代執行操作時調用它們?

+0

這幾乎是我想我必須做的 - 我希望避免必須將每個displayWidget函數包裝在容器小部件中,以便mainWindow菜單/工具欄等可以調用它們。由於容器可以容納不同類型的顯示器,因此它也必須檢查它包含的內容。 – 2012-04-17 15:49:00

+0

有趣的是,雖然dockwidget的設計不同,但它可以從任何QWidget繼承,看起來更像是一個接口類型類,而不是純容器。 – 2012-04-17 15:50:22