QDockWidget

QDockWidget通常為一區塊,讓使用者自由移動它在窗口內的位置,這邊我們先在主窗口創立一個QTextEdit的中央元件,接著再創立2個QDockWidget。


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDockWidget>
#include <QTextEdit>
#include <QHBoxLayout>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
private:
    QDockWidget *dock1;
    QDockWidget *dock2;
    QTextEdit *textMain;
    QTextEdit *text1;
    QTextEdit *text2;
};

#endif 

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    setWindowTitle(tr("QDockWidget"));
    textMain = new QTextEdit(this);
    textMain->setText(tr("這是主視窗的內容部分"));
    setCentralWidget(textMain);

    text1 =new QTextEdit(this);
    text1->setText(tr("附屬視窗1的內容部分"));
    dock1 = new QDockWidget(tr("附屬視窗1"),this);
    dock1->setFeatures(QDockWidget::AllDockWidgetFeatures); //設定元件移動、關閉、浮動的特性,本例皆可
    dock1->setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea); //可在主窗口的左或右停靠
    dock1->setWidget(text1);
    addDockWidget(Qt::RightDockWidgetArea,dock1);

    text2 =new QTextEdit(this);
    text2->setText(tr("附屬視窗2的內容部分"));
    dock2 = new QDockWidget(tr("附屬視窗2"),this);
    dock2->setFeatures(QDockWidget::AllDockWidgetFeatures);
    dock2->setAllowedAreas(Qt::RightDockWidgetArea|Qt::LeftDockWidgetArea);
    dock2->setWidget(text2);
    addDockWidget(Qt::RightDockWidgetArea,dock2);
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

QDockWidget


  • setCentralWidget()、addDockWidget()皆為QMainWindow的成員函式,QWidget無法使用。