天天看點

Qt中使用QDockWidget實作類似VS界面布局

在常用的程式設計工具中,VS是以其功能強大深受大家的喜愛,下面通過QT實作類似于VS界面的界面,可以拖動和調整。

先看一下效果圖:

Qt中使用QDockWidget實作類似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);

}
           

源碼下載下傳

繼續閱讀