一、流程:
停靠窗口QDockWidget类也是在应用程序中经常用到的,设置窗口的一般流程如下:
(1)创建一个QDockWidget对象的停靠窗体。
(2)设置停靠窗体的属性,通常调用setFeatures()及setAreas()两种方法。
(3)新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit。
(4)将控件插入停靠窗体,调用QDockWidget的setWidget()方法。
(5)使用addDockWidget()方法在MainWindow中加入此停靠窗口
二、源码:
停靠窗体QDockWidget类的使用:窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动的右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各种状态。效果图如下:
(1)DockWidget.h
#ifndef DOCKWINDOWS_H
#define DOCKWINDOWS_H
#include <QMainWindow>
class DockWindows : public QMainWindow
{
Q_OBJECT
public:
DockWindows(QWidget *parent = nullptr);
~DockWindows();
};
#endif // DOCKWINDOWS_H
(2)DockWidget.cpp
#include "dockwindows.h"
#include "QTextEdit"
#include "QDockWidget"
DockWindows::DockWindows(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(QString::fromLocal8Bit("DockWindows")); //设置主场口的标题文字
QTextEdit *te = new QTextEdit(this); //定义一个QTextEdit对象作为主窗口
te->setText(QString::fromLocal8Bit("三国演义之桃园三结义")); //主窗口设置文本为mainwinds
te->setAlignment(Qt::AlignCenter); //文字居中
setCentralWidget(te); //将此编辑框设为主窗口的中央窗体
//停靠窗口1
QDockWidget *dock = new QDockWidget(QString::fromLocal8Bit("窗口1"),this);
//可移动
dock->setFeatures(QDockWidget::DockWidgetMovable); //a
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); //b
QTextEdit *te1 =new QTextEdit();
te1->setText(QString::fromLocal8Bit("刘备,那人不甚好读书;性宽和,寡言语,喜怒不形于色;素有大志,专好结交天下豪杰;生得身长七尺五寸,两耳垂肩,双手过膝,目能自顾其耳,面如冠玉,唇若涂脂;" ""));
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口2
dock =new QDockWidget(QString::fromLocal8Bit("窗口2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetFloatable);
QTextEdit *te2 =new QTextEdit();
te2->setText(QString::fromLocal8Bit("关羽,身长九尺,髯长二尺,面若重枣,唇若涂脂,丹凤眼、眉卧蚕,相貌堂堂,威风凛凛”。其丹凤眼和卧蚕眉乃世间罕见,凤眼生威,卧蚕似雾,英气逼人,霸气十足。据说他丹凤眼一睁,就是要杀人。关羽有美须髯,万人之敌、忠义双全;好读左氏春秋,能诵读如流。使青龙偃月刀,胯下赤兔马 " ""));
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口3
dock =new QDockWidget(QString::fromLocal8Bit("窗口3"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetMovable);
QTextEdit *te3 =new QTextEdit();
te3->setText(QString::fromLocal8Bit("张飞,身长八尺,豹头环眼,燕颔虎须,生若巨雷,势如奔马”是原文对张飞的描写,而在电视剧中我们看到,张飞长得黑黝黝,络腮胡子向上下左右四个方向生长,眼睛总是瞪得滚圆,发怒的时候眼珠子就像要跳出来似的,说话用来吼,如打雷般让人震撼 " ""));
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock);
}
DockWindows::~DockWindows()
{
}
其中:
(a)setFeatures() 方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数DockWidget::DockWidgetFeatures指定停靠窗口的特性,包括以下几种参数。
①DockWidget::DockWidgetClosable:停靠窗体可关闭
②DockWidget::DockWidgetMovable:停靠窗体可移动
③DockWidget::DockWidgetFloatable:停靠窗体可浮动
④DockWidget::AllDockWidgetFeatures:此参数表示拥有停靠窗体的所有特性
⑤DockWidget::NoDockWidgetFeatures:不可移动、不可关闭、不可浮动
此参数可采用或(|)的方式对停靠窗体进行特性的设定
(b)setAllowedAreas() 方法设置停靠窗体可停靠的区域,原型如下:
void setAllowedAreas(Qt::DockWidgetAreas areas)
参数Qt::DockWidgetAreas指定停靠窗体可停靠的区域,包括以下几种参数。
①Qt::LeftDockWidgetAreas:可在主窗体左侧停靠
②Qt::RightDockWidgetAreas:可在主窗体右侧停靠
③Qt::TopDockWidgetAreas:可在主窗体顶部停靠
④Qt::BottomDockWidgetAreas:可在主窗体底部停靠
⑤Qt::AllDockWidgetAreas:可在主窗体任意(以上四个)部位停靠
⑥Qt::NoDockWidgetAreas:只可停靠在插入处
各区域设定也可采用或(|)的方式进行。