2017-02-03 241 views
0

我繼承了一個基於Qt的應用程序,它通過將詳細信息屏幕作爲單獨的窗口呈現來處理主/明細關係。主窗口包含一個列表,當您點擊一行時,會打開一個單獨的詳細信息窗口。如何將一個窗口「嵌入」另一個窗口

在代碼庫中,詳細信息窗口由QML文件和匹配的.cpp文件(主窗口也有自己的.cpp文件)處理。我面臨的問題是,一個新客戶希望我爲他們修改這個應用程序,除了他們希望一切都發生在一個窗口內。他們希望列表顯示在左側,然後當用戶點擊一行時,詳細信息屏幕將顯示在窗口右側的自己的面板中(但不在單獨的窗口中)。

由於各種原因,我不能輕易重構此應用程序。對我而言,更快的解決方案是繼續在自己的窗口中顯示詳細信息屏幕,但要使其成爲無邊框窗口並將此無邊框窗口置於主窗口頂部(右側),以使其看起來像是一個面板在主窗口內。

Qt可以這樣嗎?過去我編寫了一些Windows應用程序,這些應用程序與Windows API有關,但我不知道在本機Mac OS應用程序中是否可以這樣做,所以我不知道Qt是否可以在某些情況下處理它自動方式。

+0

您可以在自己的'Item {}'類型中分開部分可重用的UI,並在特定容器的內部或外部使用它。如果你只能處理QML,那麼它可能意味着從分離的項目中創建一個新的.qml文件,並根據應用程序項目的組織方式將其放到資源文件或其他qml文件的目錄中。 – AlexanderVX

+0

我同意重構項目。我最近有一個類似的問題,發現reparenting實現對接行爲的方式:http://stackoverflow.com/questions/41490652/docking-in-qtquick/41520315#41520315 –

+0

@AlexanderVX:我不能真正重構的原因這是我基本上製作我們的主要應用程序的副本,然後修改我的副本。在做出這些更改後,我需要繼續更新我的副本,並對原始副本進行更改(換句話說,我需要保留副本與原始副本保持同步)。我對副本做出的改變越激烈,同步會變得越困難。我曾經爲我們的客戶之一做過這件事,但由於99%的更改都在QML方面,所以保持版本同步並不是什麼大問題。 – MusiGenesis

回答

1

你可以嘗試的一件事是創建一個基於「main」窗口的窗口小部件,然後使用QWidget::createWindowContainer()來封裝QtQuick窗口以便用QtWidget方法來定位它們,例如,佈局。

相關問題