QT佈局管理(2)-停靠吸附窗口類QDockWidget,可用鼠標挪動控件位置/調整大小、Tab嵌套

幫助文件中指出,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裏放了個文本編輯器,運行效果如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章