轉載:好兒郎~志在四方
詳細描述:
QDockWidget類提供了一個窗體部件,其可以停靠在QMainWindow,或其本身作為一個在桌面上的頂級窗口(也就是父窗體)。
QDockWidget類提供了dock widget的概念,dock widget也就是我們熟悉的工具面板或者是工具窗口。
Dock window是放置在QMainWindow窗口周圍的dock widget區域中的小部件。
圖形描述如下:
Dock windows可以在幾個區域中移動,或者是懸浮。該類提供的API允許程序員限制dock widgets的移動,懸浮和關閉,以及它可以被放置的區域。
成員類型:
QDockWidget對象包含一些特性,例如:移動、懸浮、關閉等等,這些都是枚舉類型。
創建停靠窗體的流程:
- 創建一個QDockWidget對象的停靠窗體。
- 設置此停靠窗體的屬性,通常可以使用setFeatures()以及setAllowedAreas()兩種方法。
- 新建一個要插入停靠窗體的控件,常用的有QListWidget和QtextEdit。
- 將控件插入停靠窗體,調用QDockWidget()和setWidget()成員函數。
- 使用addDockWidget()方法,在MainWindow中加入此停靠窗體。
實例:
- 窗口1可以在左邊和右邊移動;
- 窗口2 沒有相關的任何特性;
- 窗口3具有相關的所有特性;
步驟:
1、新建GUI應用,項目名自定義,基類選擇QMainWindow,注意要取消"創建界面"復選框。
MainWindow類構造函數的說明:
class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); };
2、MainWindow.cpp文件,也就是MainWindow類構造函數的實現,代碼如下:
#include "mainwindow.h" #include <QTextEdit> #include <QDockWidget> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setWindowTitle(tr("DockWidget")); QTextEdit *text = new QTextEdit(this); text->setText(tr("主窗口")); text->setAlignment(Qt::AlignCenter); setCentralWidget(text); QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this); dock->setFeatures(QDockWidget::DockWidgetMovable); //指定停靠窗體的樣式,此處為可移動 dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); QTextEdit *text1 = new QTextEdit(); text1->setText(tr("窗口一")); dock->setWidget(text1); addDockWidget(Qt::RightDockWidgetArea,dock); dock = new QDockWidget(tr("DockWindow2"),this); dock->setFeatures(QDockWidget::NoDockWidgetFeatures); //沒有相關的權限 QTextEdit *text2 = new QTextEdit(); text2->setText(tr("窗口二")); dock->setWidget(text2); addDockWidget(Qt::RightDockWidgetArea,dock); dock = new QDockWidget(tr("DockWindow3"),this); dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //具有全部特性 QTextEdit *text3 = new QTextEdit(); text3->setText(tr("窗口三")); dock->setWidget(text3); addDockWidget(Qt::RightDockWidgetArea,dock); } MainWindow::~MainWindow() { }
3、主函數中的代碼如下:
#include "mainwindow.h" #include <QApplication> #include <QFont> int main(int argc, char *argv[]) { QApplication a(argc, argv); QFont font("楷體",20,QFont::Bold); a.setFont(font); MainWindow w; w.show(); w.setFixedSize(600,400); //設置窗體為固定的大小,防止用戶通過拖拽改變其大小 return a.exec(); }
4、運行效果如下: