Qt中使用QDockWidget实现类似VS界面布局

版权声明:本文为博主原创文章,未经同意不允许转载! 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);

}

源码下载

猜你喜欢

转载自blog.csdn.net/wb175208/article/details/85642874