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里放了个文本编辑器,运行效果如下:

 

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