2015-05-06 17 views
2

我有一個在Win32窗口中使用QWinWidget的應用程序。我想添加DockWidgets和相關的行爲。似乎沒有任何公開的API用於添加定製的DockAreas,並且除了將DockWidgets添加到QMainWindow之外,最新的文檔是稀疏的。 Older docs imply那裏曾經是公共類QDockArea使用QWinWidget對接:將DockWidgetAreas添加到QWidgets

到目前爲止,我最好的選擇似乎是QWinWidget的adding a neutered QMainWindow(沒有頂級狀態,沒有框架等),並從那裏(second source)。

我希望有一種方法可以將DockAreas添加到任何容器,但它不會以這種方式出現。作爲一個方面說明,QWinWidget用於使窗口管理器控制與我們的自定義框架要求,但如果有一個純粹的QMainWindow/QWidget方式具有相同的結果(與Qt::FramelessWindowHint),我很樂意切換。

+1

我將QMainWindow作爲一種小孩的方式來使用......而且它確實很無痛。神祕無痛,甚至... – Nick

回答

0

正如我在評論中所說的,我在我的Win32窗口的QWinWidget中添加了一個QMainWindow字段。那就是:

class QWinWidget : public QWidget 
{ 
    ... 
    QMainWidget* mainWidget; 
} 

QWinWidget::QWinWidget() 
{ 
    mainWidget = new QMainWindow(this); 
    mainWidget->setWindowFlags(Qt::Widget); //1 
} 

注意的是,雖然thedocssomeforum postsfrom this post)表示,你需要明確設置窗口的標誌,由於QMainWindow的構造函數設置Qt::Window,我測試了它沒有setWindowFlags()線(標有上述//1)沒有注意到任何錯誤。

所以,這給了我一個很好的QWinWidget窗口,我花了很多時間在一個無框架的Win32窗口中創建一個QMainWindow子窗口,並且附帶了所有的功能。對接,菜單欄,狀態欄等等。