版权声明:本文为博主原创文章,未经同意不允许转载! https://blog.csdn.net/wb175208/article/details/85642874
在常用的编程工具中,VS是以其功能强大深受大家的喜爱,下面通过QT实现类似于VS界面的界面,可以拖动和调整。
先看一下效果图:
主要是利用以下两个函数:
void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation);
此函数的功能是把两个dock进行左右或上下并排布置,做成一个类似QSplit的功能。布局原则:先水平,再竖直,从左到右,从上到下。
void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)
此函数的功能是把多个dock变成一个tab形式的窗口。
主要实现过程:
void DockLayout::init() {
setDockNestingEnabled(true);
QDockWidget* d1 = new QDockWidget(QStringLiteral("窗口1"), this);
d1->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d1->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui1* gui1 = new QtGui1;
d1->setWidget(gui1);
addDockWidget(Qt::LeftDockWidgetArea, d1);
QDockWidget* d2 = new QDockWidget(QStringLiteral("窗口2"), this);
d2->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d2->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui2* gui2 = new QtGui2;
d2->setWidget(gui2);
addDockWidget(Qt::RightDockWidgetArea, d2);
splitDockWidget(d1, d2, Qt::Horizontal);
QDockWidget* d3 = new QDockWidget(QStringLiteral("窗口3"), this);
d3->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d3->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui3* gui3 = new QtGui3;
d3->setWidget(gui3);
addDockWidget(Qt::RightDockWidgetArea, d3);
QDockWidget* d4 = new QDockWidget(QStringLiteral("窗口4"), this);
d4->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d4->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui4* gui4 = new QtGui4;
d4->setWidget(gui4);
addDockWidget(Qt::BottomDockWidgetArea, d4);
splitDockWidget(d2, d4, Qt::Vertical);
splitDockWidget(d2, d3, Qt::Horizontal);
QDockWidget* d5 = new QDockWidget(QStringLiteral("窗口5"), this);
d5->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d5->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui5* gui5 = new QtGui5;
d5->setWidget(gui5);
addDockWidget(Qt::BottomDockWidgetArea, d5);
QDockWidget* d6 = new QDockWidget(QStringLiteral("窗口6"), this);
d6->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetClosable);
d6->setAllowedAreas(Qt::AllDockWidgetAreas);
QtGui6* gui6 = new QtGui6;
d6->setWidget(gui6);
addDockWidget(Qt::BottomDockWidgetArea, d6);
tabifyDockWidget(d1, d5);
tabifyDockWidget(d4, d6);
}