参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括一下几种参数
参数 | 说明 |
---|---|
Qt::LeftDockWidgetArea | 在窗口的左侧停靠 |
Qt::RightDockWidgetArea | 在窗口的右侧停靠 |
Qt::TopDockWidgetArea | 在窗口的顶端停靠 |
Qt::BottomDockWidgetArea | 在窗口的底部停靠 |
Qt::AllDockWidgetArea | 可在窗口任意(以上四个)部位停靠 |
Qt::NoDockWidgetArea | 只可停靠在插入处 |
dockWidgetOperation->setAllowedAreas(Qt::RightDockWidgetArea);//设置DockWidget停靠在窗口右侧
this->setCorner(Qt::TopLeftCorner,Qt::LeftDockWidgetArea);//将左上角分配给左侧区域
this->setCorner(Qt::BottomLeftCorner,Qt::LeftDockWidgetArea);//将左下角分配给左侧区域
this->setCorner(Qt::TopRightCorner,Qt::RightDockWidgetArea);//将右上角分配给右侧区域
this->setCorner(Qt::BottomRightCorner,Qt::RightDockWidgetArea);//将右下角分配给右侧区域
this->setCorner(Qt::TopLeftCorner,Qt::TopDockWidgetArea);//将左上角分配给顶部区域
this->setCorner(Qt::BottomLeftCorner,Qt::BottomDockWidgetArea);//将左下角分配给底部区域
this->setCorner(Qt::TopRightCorner,Qt::TopDockWidgetArea);//将右上角分配给顶部区域
this->setCorner(Qt::BottomRightCorner,Qt::TopDockWidgetArea);//将右下角分配给底部区域
设置停靠窗口特性。
参数QDockWidget::DockWidgetFeatures指定停靠窗口的特性。
参数 | 说明 |
---|---|
QDockwidget::DockWidgetCloseable | 停靠窗口可关闭 |
QDockwidget::DockWidgetMovable | 停靠窗口可移动 |
QDockwidget::DockWidgetFloatable | 停靠窗口可浮动 |
QDockwidget::DockWidgetVerticalTitleBar | 标题栏垂直放置 |
QDockwidget::AllDockWidgetFeatures | 此参数表示窗口拥有停靠窗体的所有特性 |
QDockwidget::NoDockWidgetFeatures | 不可移动,不可关闭,不可浮动 |
添加dock,给dock指定位置,同时也可以更改dock的位置。
void QMainWinow::addDockWidget(Qt::DockWidgetArea area,QDockWidget * dockwidget);
例:
this->addDockWidget(Qt::RightDockWidgetArea,dockWidgetOperation);//在窗体右侧添加名为dockWidgetOperation的DockWidget窗体
用于分割dock窗口,是把两个dock进行左右或上下并排布置,做成一个类似QSplit的功能,分割原则是:水平从左到右,竖直从上到下。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
例:
this->splitDockWidget(topdockWidgetOperation,bottomdockWidgetOperation,Qt::Vertical);//将两个DockWidget垂直布局
this->splitDockWidget(topdockWidgetOperation,bottomdockWidgetOperation,Qt::Horizontal);//将两个DockWidget水平布局
用于tab化窗口,把多个dock变成一个tab形式的窗体。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
靠左右布局的QDockWidget的高度是自适应的,宽度需要初始化设置,同理靠上下布局的高度需要初始化设置。
void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
第一个参数是用来配置是哪个dock窗口需要调整大小;
第二个参数是用来配置dock所占的像素大小,如果配置大于或者小于QMainWindow本身空间,Qt会根据所配置的像素大小的相对权重分配到dock中;
第三个参数用来配置调整的方向,如果为Qt::Horizontal,调整dock宽度,Qt::Vertical调整dock高度,确定了停靠位置后resizeDocks才起作用。
需要注意的是Qt官方文档上有注明这个方法在Qt5.6中引入,所以比Qt5.6低的版本并不能使用本方法。resizeDocks在多行或多列时初始化高宽无效问题!
注意:Dockwidget去掉标题栏将不可拖动!
//方法一:
QWidget *Widget = new QWidget;
ui->dockwidget->setTitleBarWidget(Widget);
//方法二:
dockwidget->setTitleBarWidget(new QWidget());
dockWidgetOperation->setWindowTitle(tr("停靠窗口1"));