(資料圖)
如右圖所示,左半部分MainWindow是該窗口的中心窗口,右邊的最下面兩個??看翱诳梢蕴鲈摯翱冢?
但是第一個停靠窗口只能??吭谟疫吇蛘咦筮叄荒芴?。 同時各個窗口的大小可以調(diào)節(jié)。 另外,各個窗口可以合并:
1 #include \"dockwindows.h\" 2 #include 3 #include 4 DockWindows::DockWindows(QWidget *parent) 5 : QMainWindow(parent) 6 { 7 setWindowTitle(tr(\"DockWindows\"));//設(shè)置主窗口的標(biāo)題欄文字 8 QTextEdit *te=new QTextEdit(this);//定義一個QTextEdit對象作為主窗口 9 te->setText(tr(\"Main Window\"));10 te->setAlignment(Qt::AlignCenter);11 setCentralWidget(te); //將此編輯框作為主窗體的中央窗體12 //??看翱?13 QDockWidget *dock1=new QDockWidget(tr(\"DockWindow1\"),this);14 QDockWidget *dock2=new QDockWidget(tr(\"DockWindow2\"),this);15 QDockWidget *dock3=new QDockWidget(tr(\"DockWindow3\"),this);16 //可移動17 dock1->setFeatures(QDockWidget::DockWidgetMovable);18 dock1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);19 QTextEdit *te1=new QTextEdit();20 te1->setText(tr(\"Window1,The dock widget can be moved between dicks by user\" \"\"));21 dock1->setWidget(te1);22 addDockWidget(Qt::RightDockWidgetArea,dock1);23 //??看翱?24 //dock2=new QDockWidget(tr(\"DockWindow2\"),this);25 dock2->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);26 QTextEdit *te2=new QTextEdit();27 te2->setText(tr(\"Window2,The dock widget can be detached from the main window,\"28 \"\"\"and floated as an independent window,and can be closed\" ));29 dock2->setWidget(te2);30 addDockWidget(Qt::RightDockWidgetArea,dock2);31 //??看翱?32 //dock3=new QDockWidget(tr(\"DockWindow3\"),this);33 dock3->setFeatures(QDockWidget::AllDockWidgetFeatures);34 QTextEdit *te3=new QTextEdit();35 te3->setText(tr(\"Window3,The dock widget can be closed,moved,add floated\"));36 dock3->setWidget(te3);37 addDockWidget(Qt::RightDockWidgetArea,dock3);38 }39 40 DockWindows::~DockWindows()41 {42 43 }
1.line 17: dock1->setFeatures(QDockWidget::DockWidgetMovable); 這個函數(shù)設(shè)置停靠窗口是否可移動,可關(guān)閉,可懸浮。 在這個持續(xù)中,第一個停靠窗口只能移動,第二個窗口不可移動,也就是說它只能懸浮或者關(guān)閉,不能出現(xiàn)在第一個或者第三個??看翱诘奈恢?。
第三個窗口則具備了上述所有屬性。下面是Qt文檔的解釋:
This property holds whether the dock widget is movable, closable, and floatable. By default, this property is set to a combination of DockWidgetClosable, DockWidgetMovable and DockWidgetFloatable.
2.QDockWidget的隱式共享 在前面講QString時提到了隱式共享,其實隱式共享同樣支持所有的容器類,QDockWidget就是其中之一。 可以看到,我定義了三個QDockWidget對象:dock1,dock2,dock3。事實上,只需要一個QDockWidget對象就足夠了,只需要在每個??看翱诔跏蓟臅r候重新初始化這個dock對象。 那么就會出現(xiàn)一個問題: 在 addDockWidget(Qt::RightDockWidgetArea,dock2); 這段代碼中(出現(xiàn)了三次),如果只用一個dock,會不會使已定義的dock對象不見了?如果這個dock是C++中的一個引用的話,確實會導(dǎo)致對象被覆蓋。但是Qt的隱式共享解決了這個問題,有關(guān)隱式共享的問題之前已經(jīng)解釋過了:http://blog.csdn.net/leehdsniper/article/details/50975227。
【領(lǐng) QT開發(fā)教程 學(xué)習(xí)資料, 點擊下方鏈接莬費領(lǐng)取↓↓ ,先碼住不迷路~】
點擊這里:
標(biāo)簽: