4.2 停靠窗口QDockWidget类
停靠窗口QDockWidget类也是应用程序中经常用到的,设置停靠窗口的一般流程为:
(1) 创建一个QDockWidget对象的停靠窗体。
(2) 设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
(3) 新建一个要插入停靠窗体的控件,常用的一般为QListWidget和QTextEdit。
(4) 把控件插入停靠窗体,调用QDockWidget的setWidget()方法。
(5) 使用addDockWidget()方法在MainWidow中加入此停靠窗体。
下面通过一个简单的例子来学习停靠窗口QDockWidget类的使用,窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各个状态。效果如图4.2所示。见代码CH402。
图4.2 简单停靠窗口实例
本实例是采用编写代码的方式实现的,具体实现步骤如下:
(1) 创建一个工程,创建过程中在“Qt4 Gui Application”界面中“Base Class”下拉列表框中选择“QMainwindow”选项,停靠窗口DockWindows类继承自QMainWindow类,停靠窗口只在主窗口QMainWindow中使用。因此,在“Class name”后面的文本框中输入“DockWindows”,取消“Gernerate form”复选框的选中状态,如图4.3所示。
图4.3 Class Information
QMainWindow主窗口的使用将在第6章中详细介绍。
(2) DockWindows类说明中只有一个构造函数的说明。代码如下:
class DockWindows : public QMainWindow { Q_OBJECT public: DockWindows(QWidget *parent = 0); ~DockWindows(); };
其中:
● setFeatures()方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数QDockWidget::DockWidgetFeature指定停靠窗体的特性,包括以下几种:
① QDockWidget::DockWidgetClosable:停靠窗可关闭。
② QDockWidget::DockWidgetMovable:停靠窗可移动。
③ QDockWidget::DockWidgetFloatable: 停靠窗可浮动。
④ QDockWidget::AllDockWidgetFeatures: 此参数表示拥有停靠窗的所有特性。
⑤ QDockWidget::NoDockWidgetFeature:不可移动、不可关闭、不可浮动。
此参数可采用或(|)的方式对停靠窗进行特性的设定。
● setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:
void setAllowedAreas(Qt::DockWidgetAreas areas)
参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种:
① Qt::LeftDockWidgetArea:可在主窗口的左侧停靠。
② Qt::RightDockWidgetArea:可在主窗口的右侧停靠。
③ Qt::TopDockWidgetArea:可在主窗口的顶端停靠。
④ Qt::BottomDockWidgetArea: 可在主窗口的底部停靠。
⑤ Qt::AllDockWidgetArea: 可在主窗口任意(以上四个)部位停靠。
⑥ Qt::NoDockWidgetArea: 只可停靠在插入处。
各区域设定也可采用或(|)的方式进行设定。
(3) 打开“dockwindows.cpp”文件,DockWindows类构造函数实现窗口的初始化及功能实现,具体代码如下:
DockWindows::DockWindows(QWidget *parent) : QMainWindow(parent) { setWindowTitle(tr("DockWindows")); //设置主窗口的标题栏文字 QTextEdit *te=new QTextEdit(this); //定义一个QTextEdit对象作为主窗口 te->setText(tr("Main Window")); te->setAlignment(Qt::AlignCenter); setCentralWidget(te); //将此编辑框设为主窗口的中央窗体 //停靠窗口1 QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this); dock->setFeatures(QDockWidget::DockWidgetMovable); //可移动 dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); QTextEdit *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::DockW idgetFloatable); //可浮动、可关闭 QTextEdit *te2 =new QTextEdit(); te2->setText(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); //全部特性 QTextEdit *te3 =new QTextEdit(); te3->setText(tr("Window3,The dock widget can be closed, moved, and floated")); dock->setWidget(te3); addDockWidget(Qt::RightDockWidgetArea,dock); }
(4) 在dockwindows.cpp文件的开始部分加入以下头文件:
#include<QTextEdit> #include<QDockWidget>
(5) 运行程序,显示效果如图4.2所示。