幫助文件中指出,QDockWidget只能在QMainWindow及其子類中使用
QDockWidget的初始大小,實際上等於其子控件的QT推薦值大小sizeHint。由於sizeHint屬性是隻讀的sizeHint(),如果想自定義QDockWidget的初始大小,只能繼承一個QWidget或者QWidget的子類,並覆蓋重寫SizeHint()函數,在這個函數裏返回自定義的推薦大小,詳細步驟可自行搜索:QT程序初始化時QDockWidget大小。
下面看兩個簡單應用,來學習一下QDockWidget的使用
新建一個窗口,模板選擇Main windows,如下圖。(新建widget工程後,自帶的那個窗口就是Main windows模板的)
在中間隨便拖入兩個控件(我放置了一個日曆控件),再拖入幾個QDockWidget,並設置它們的屬性爲:允許四面停靠、可移動、可關閉等,見下圖
爲了看的更清楚,通過樣式表,給QDockWidget設置不同背景色:background-color: rgb(85, 170, 255);
效果如下:
一行代碼都不需要,直接運行就可看到這一結果:
如果不需要中間的控件,可以使用QMainWindow::takeCentralWidget()把中間控件給去掉,這樣就只剩下停靠窗口了。
用代碼添加停靠窗體,也簡單的很,就幾行:
新建一個空白的QMainWindow,然後在構造函數裏寫:
DockWin::DockWin(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::DockWin)
{
ui->setupUi(this);
// this->takeCentralWidget();//去掉中間控件
QDockWidget *dockWdt_1 = new QDockWidget("日曆");
dockWdt_1->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);//可移動、可浮動、不可關閉
dockWdt_1->setWidget(new QCalendarWidget());//在停靠窗體裏添加一個日曆控件(任何控件都可以)
dockWdt_1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea);//允許停靠在左、右、上
this->addDockWidget(Qt::RightDockWidgetArea, dockWdt_1);//把Dock添加到MainWindow
QDockWidget *dockWdt_2 = new QDockWidget("文本編輯器");
dockWdt_2->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);//可移動、可浮動、不可關閉
dockWdt_2->setWidget(new QTextEdit());//在停靠窗體裏添加一個編輯器控件(任何控件都可以)
dockWdt_2->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea);//允許停靠在左、右、上
this->addDockWidget(Qt::RightDockWidgetArea, dockWdt_2);//把Dock添加到MainWindow
this->setDockNestingEnabled(false);//禁止Dock嵌套
tabifyDockWidget(dockWdt_1, dockWdt_2);//把兩個Dock合併到一個Tab控件裏面
}
以上代碼添加了兩個DockWidget,一個Dock裏放了個日曆,另一個Dock裏放了個文本編輯器,運行效果如下: