停靠窗口一般流程:
- 创建QDockWidget对像的停靠窗体;
- 设置此停靠窗体属性,常用setFeatures()、setAllowedAreas()两种方法;
- 新建一个要插入停靠窗体的控件,常用有QListWidget和QTextEdit;
- 将控件插入停靠窗体,调用QDockWidget的setWidget()方法;
- 使用addDockWidget()方法在MainWindow中加入此停靠窗体;
停靠窗口特性:
- QDockWidget::DockWidgetClosable // 停靠窗口可关闭
- QDockWidget::DockWidgetMovable // 停靠窗口可移动
- QDockWidget::DockWidgetFloatable // 停靠窗口可浮动
- QDockWidget::AllDockWidgetFeatures // 停靠窗口 可关闭、可移动、可浮动 所有特性
- QDockWidget::NoDockWidgetFeatures // 停靠窗口 不可关闭、不可移动、不可浮动
停靠窗口特性设置:
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//全部特性
停靠窗口停靠区域设定:
- Qt::RightDockWidgetArea // 可在主窗口的右侧停靠
- Qt::TopDockWidgetArea // 可在主窗口的顶端停靠
- Qt::BottomDockWidgetArea // 可在主窗口的底部停靠
- Qt::AllDockWidgetAreas // 可在主窗口的任意部位停靠
- Qt::NoDockWidgetArea // 只可停靠在插入处
//各区域设定可以通过或(|)的方式进行;
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
kwindows.h
#ifndef DOCKWINDOWS_H
#define DOCKWINDOWS_H
#include <QMainWindow>
class DockWindows : public QMainWindow
{
Q_OBJECT
public:
DockWindows(QWidget *parent = nullptr);
~DockWindows();
};
#endif // DOCKWINDOWS_H
dockwindows.cpp
#include "dockwindows.h"
#include <QTextEdit>
#include <QDockWidget>
DockWindows::DockWindows(QWidget *parent)
: QMainWindow(parent)
{
// Main Window
setWindowTitle("DockWindows");
QTextEdit *te = new QTextEdit(this);
te->setText("Main Window");
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te);
// DockWindow1
QDockWidget *dock = new QDockWidget("DockWindow1", this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
QTextEdit *te1 = new QTextEdit();
te1->setText("Winodw1, the dock widget can be moved between docks by the user");
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea, dock);
// DockWindow2
dock= new QDockWidget("DockWindow2", this);
dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
QTextEdit *te2 = new QTextEdit();
te2->setText("DockWindow2, The dock widget can be detached from the main window");
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea, dock);
// DockWindow3
dock = new QDockWidget("DockWindow3", this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//全部特性
QTextEdit *te3 = new QTextEdit();
te3->setText("Window3 The dock widget can be closed moved and floated");
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea, dock);
}
DockWindows::~DockWindows()
{
}
main.cpp
#include "dockwindows.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
DockWindows w;
w.show();
return a.exec();
}