Qt 佈局管理之 停靠視窗QDockWidget
阿新 • • 發佈:2022-03-29
停靠視窗QDockWidget類也是應用程式中經常用到的,設定停靠視窗的一般流程如下。
(1)建立一個QDockWidget物件的停靠窗體。
(2)設定此停靠窗體的屬性,通常呼叫setFeatures()及setAllowedAreas()兩種方法。
(3)新建一個要插入停靠窗體的控制元件,常用的有QListWidget和QTextEdit。
(4)將控制元件插入停靠窗體,呼叫QDockWidget的setWidget()方法。
(5)使用addDockWidget()方法在MainWindow中加入此停靠窗體。
DockWindows.h
#ifndef DOCKWINDOWS_DOCKWINDOWS_H #define DOCKWINDOWS_DOCKWINDOWS_H #include <QMainWindow> class DockWindows: public QMainWindow{ Q_OBJECT public: explicit DockWindows(QWidget*parent=0); ~DockWindows(); }; #endif //DOCKWINDOWS_DOCKWINDOWS_H ### DockWindows.cpp
#include "DockWindows.h" #include <QTextEdit> #include <QDockWidget> DockWindows::DockWindows(QWidget *parent): QMainWindow(parent) { setWindowTitle(tr("DockWindows"));//主視窗標題欄 auto *te = new QTextEdit(this); te->setText(tr("Main Window")); te->setAlignment(Qt::AlignCenter); setCentralWidget(te);//將此視窗設定為主視窗的中央視窗 //停靠視窗1 auto *dock = new QDockWidget(tr("DockWindow1"), this); // 可移動 dock->setFeatures(QDockWidget::DockWidgetMovable); dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); auto *te1 = new QTextEdit; te1->setText(tr("Window1 ,the dock widget can be moved between docks by the user")); dock->setWidget(te1); addDockWidget(Qt::RightDockWidgetArea,dock); //停靠視窗2 dock = new QDockWidget(tr("DockWindow2"), this); dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);//可關閉可浮動 auto *te2 = new QTextEdit(tr("Window2 The dock widget can be detached from the main window,and floated as an independent window,and can be closed")); dock->setWidget(te2); addDockWidget(Qt::RightDockWidgetArea,dock); //停靠視窗3 dock = new QDockWidget(tr("DockWindow3"),this); dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//全部特性 auto *te3 = new QTextEdit(); te3->setText(tr("Window3,the dock widget can be cllose moved and floated")); dock->setWidget(te3); addDockWidget(Qt::RightDockWidgetArea,dock); } DockWindows::~DockWindows() { }
main.cpp
#include <QApplication>
#include <QPushButton>
#include "DockWindows.h"
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
DockWindows d;
d.show();
return QApplication::exec();
}