推薦於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...