一.QDockWidget类概述
1.QDockWidget类
QDockWidget类提供了一个特殊的窗口部件,它可以是被锁在QMainWindow窗口内部或者是作为顶级窗口悬浮在桌面上。
QDockWidget类提供了dock widget的概念,dock widget也就是我们熟悉的工具面板或者是工具窗口。Dock window是放置在QMindow窗口周围的dock widget区域中的。
如下图所示:
Dock windows可以在几个区域中移动,或者是悬浮。该类提供的API允许程序员限制dock widgets的移动,悬浮和关闭,以及它可以被放置的区域。
注意:QDockWidget目前只有锁定在QMainWindow窗口内部,才能展现出QDockWidget应有的属性,如果将QDockWidget放到布局管理器当中,那么就只能当作QWidget使用了。
2.QDockWidget功能和QSplitter类有一定的类似之处,见之前文章:
QSplitter分裂器的使用方法:https://mp.csdn.net/mp_blog/creation/editor/138561130
二.QDockWidget常用方法
常用函数:
1.addDockWidget:添加停靠控件,用于指定或更改停靠控件的位置以及方向。
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)
2.splitDockWidget:分割窗口,用于对两个QDockWidget进行水平或垂直布局。
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)
3.tabifyDockWidget:合并窗口,用于将多个QDockWidget叠加到同一区域。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
4.setDockNestingEnabled:是否允许嵌套布局
void QMainWindow::setDockNestingEnabled(bool enabled)
三.demo
1.MyForm.h
#ifndef MYFORM_H
#define MYFORM_H
#include "ui_form.h"
#include <QDockWidget>
class MyForm:public QDockWidget
{
Q_OBJECT
public:
explicit MyForm();
~MyForm();
private:
Ui::Form *ui;
};
#endif // MYFORM_H
2.MyForm.cpp
#include "MyForm.h"
#include "ui_form.h"
MyForm::MyForm():ui(new Ui::Form)
{
ui->setupUi(this);
}
MyForm::~MyForm()
{
delete ui;
}
3.mywindow.h
#ifndef MYWINDOW_H
#define MYWINDOW_H
#include <QMainWindow>
namespace Ui {
class MyWindow;
}
class MyWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MyWindow(QWidget *parent = 0);
~MyWindow();
private:
Ui::MyWindow *ui;
};
#endif // MYWINDOW_H
4.mywindow.cpp
#include "mywindow.h"
#include "ui_mywindow.h"
#include <QTextEdit>
#include <QDockWidget>
#include "MyForm.h"
MyWindow::MyWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyWindow)
{
ui->setupUi(this);
QTextEdit *text = new QTextEdit("");
text->append("");
setCentralWidget(text);
QDockWidget *dockWidget1 = new /*QDockWidget("A");*/ MyForm();
addDockWidget(Qt::LeftDockWidgetArea,dockWidget1);
QDockWidget *dockWidget2 = new QDockWidget("B");
addDockWidget(Qt::RightDockWidgetArea,dockWidget2);
QDockWidget *dockWidget3 = new QDockWidget("C");
addDockWidget(Qt::TopDockWidgetArea,dockWidget3);
QDockWidget *dockWidget4 = new QDockWidget("D");
addDockWidget(Qt::BottomDockWidgetArea,dockWidget4);
}
MyWindow::~MyWindow()
{
delete ui;
}
5.程序运行界面