2014-10-17 22 views
2

我有一個自定義QMainWindow,因爲我不知道如何實現以下事情的一個大問題:派生的QMainWindow並改變其佈局

QMainWindow文檔QMainWindow呈現給有工具欄某些特殊領域,碼頭窗口小部件,狀態欄,等:

enter image description here

現在我想的是對widget的新的自定義類型的新的自定義區域,例如:

enter image description here

我試圖獲得QWidget,並把我的自定義部件了,其下方QMainWindow中,但用這種方法我必須全部來自我的QWidget標準QMainWindow方法重定向到其QMainWindow孩子,這是非常不方便的。

我的問題是:是否可以自定義QMainWindow佈局,並在標準佈局中添加額外區域,如上圖中的Custom Widget區域?

回答

1

我有兩條新聞給你:壞和好。

壞消息:QMainWindow使用QMainWindowLayout這是Qt私有頭文件的一部分,因此您不能按原樣定製佈局「誠實」。

但你仍然可以做到這一點。有一個QMainWindow::setMenuWidget方法可以幫助你。如果你的主窗口沒有菜單欄,那麼你可以簡單的寫

setMenuWidget(myCustomWidget); 

myCustomWidget將被放置在窗口的頂部。

但是,如果你的應用程序中有菜單欄,這並不容易。但即使在這種情況下,您仍然可以在窗口的頂部放置一個由兩部分組成的小部件:上面的自定義小部件和下面的菜單欄。例如,對於QtDesigner生成的窗口,可以完成如下:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QLabel *coolLabel = new QLabel("The coolest text in the world", this); 
    QWidget *menuWidget = new QWidget; 
    QVBoxLayout *vLayout = new QVBoxLayout; 
    menuWidget->setLayout(vLayout); 
    vLayout->addWidget(coolLabel); 
    vLayout->addWidget(ui->menuBar); 
    setMenuWidget(menuWidget); 
} 
+0

哈哈,這是一個超級把戲!謝謝! – 2014-10-21 18:16:37