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