在常用的程式設計工具中,VS是以其功能強大深受大家的喜愛,下面通過QT實作類似于VS界面的界面,可以拖動和調整。
先看一下效果圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2csQTQq1UMjRVTpR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1UTO0QzM1EjMyATMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
主要是利用以下兩個函數:
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);
}
源碼下載下傳