1. 程式人生 > >Qt佈局管理: 停靠視窗QDockWidget類(純程式碼實現)

Qt佈局管理: 停靠視窗QDockWidget類(純程式碼實現)

(注:以下解釋是我自己的翻譯,由於英文水平有限,望海涵)

詳細描述:

QDockWidget類提供了一個窗體部件,其可以停靠在QMainWindow,或其本身作為一個在桌面上的頂級視窗(也就是父窗體)。

QDockWidget類提供了dock widget的概念,dock widget也就是我們熟悉的工具面板或者是工具視窗。

Dock window是放置在QMainWindow視窗周圍的dock widget區域中的小部件。

原文:

Detailed Description
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-level window on the desktop.
QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary windows placed in the dock widget area around the central widget in a QMainWindow.

圖形描述如下:


Dock windows可以在幾個區域中移動,或者是懸浮。該類提供的API允許程式設計師限制dock widgets的移動,懸浮和關閉,以及它可以被放置的區域。

原文:

Dock windows can be moved inside their current area, moved into new areas and floated (e.g., undocked) by the end-user. The QDockWidget API allows the programmer to restrict the dock widgets ability to move, float and close, as well as the areas in which they can be placed.

成員型別:

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、執行效果如下: