使用QMainWindow進行布局

2021-08-08 15:01:03 字數 1029 閱讀 1745

推薦於2016-06-29 19:12:54

最佳答案

我以前給qwidget或者qdialog設定布局的時候方式很簡單。建立好乙個布局:mainlayout,然後不停地把各個控制項往mainlayout裡面放,最後呼叫setlayout(mainlayout)就行了。

可是今天在qmainwindow中使用這個方法的時候卻不管用。

當時我也建立了乙個mainlayout,再建立了乙個qtreewidget, 我吧qtreewidget設定為centralwidget,然後把其他的控制項有規律地放入mainlayout中,再呼叫setlayout(mainlayout),結果出錯了。

編譯的時候提示

qwidget::setlayout: attempting to set qlayout "" on mainwindow "", which already has a layout

這句話的意思是說,你已經給mainwindow設定過乙個布局了,再設定乙個會出錯。

該如何給qmainwindow正確地設定布局呢

要想qmainwidget建立布局,合理的步驟應該是這樣的:

第一步建立乙個qwidget例項,並將這個例項設定為centralwidget:

qwidget *widget = new qwidget();//也可以是自己定義的乙個類。

this->setcentralwidget(widget);

然後建立乙個主布局mainlayout,並把所需要的所有控制項都往裡面放(工具欄、選單欄、狀態列除外):

qhboxlayout *mainlayout = new qhboxlayout;

mainlayout->addwidget(...);

mainlayout->addlayout(...);

...最一步就是將widget的布局設定為mainlayout:

centralwidget()->setlayout(mainlayout);

//centralwidget()返回的是第一步建立的那個qwidget例項

QMainWindow和QWidget的區別

分別以qmainwindow和qwidget為基類建立工程 qt會自動建立乙個以所選基類為父類的自定義類,自動建立ui檔案,供使用者來使用。模板也是完全相同,唯一不同的是乙個隱含的檔案 qwidget下為 include ui widget.h qmainwindow下為 include ui ma...

QT基礎知識(七)QMainWindow

每乙個程式都有乙個主使用者介面,其他功能都是圍繞主視窗進行的,比如qmainwindow就是qt開發主視窗的基類。比如 通過檢視qt助手,如下 menu bar 選單欄 s 工具欄 dock widgets 懸浮視窗顯示區 central widget 中心主視窗顯示區域 status bar 底部...

QT筆記5 主介面類QMainWindow

qmainwindow為主視窗,包含選單欄 工具欄 狀態列 視窗等部件,繼承自qwidget。qmainwindow為應用程式的使用者介面提供了乙個基本的框架,當我們需要建立乙個功能全面應用程式視窗時一般使用它,如果臨時彈個框或者只需要簡單互動視窗用qdialog就行了。布局圖如下所示 menuba...