天天看點

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.

圖形描述如下:

Qt布局管理: 停靠視窗QDockWidget類(純代碼實作)

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對象包含一些特性,例如:移動、懸浮、關閉等等,這些都是枚舉類型。

Qt布局管理: 停靠視窗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、運作效果如下:

Qt布局管理: 停靠視窗QDockWidget類(純代碼實作)