本文讲讲停靠窗口的使用吧,实例效果如下:
本实例实现的停靠窗口功能如下:停靠窗口1只可在主窗口的左边和右边停靠;停靠窗口2只可在浮动和在右部停靠两种状态间切换,并且不可移动;停靠窗口3可实现停靠窗口的各个状态。
=====================实现头文件dockWindows.h===================
#ifndef DOCKWINDOWS_H
#define DOCKWINDOWS_H
#include <QtGui/QMainWindow>
class DockWindows : public QMainWindow
{
Q_OBJECT
public:
DockWindows(QWidget *patent=0);
};
#endif // DOCKWINDOWS_H
====================实现源文件dockWindows.cpp===================
#include "dockwindows.h"
#include <QtGui/QTextEdit>
#include <QtGui/QDockWidget>
DockWindows::DockWindows(QWidget *parent)
:QMainWindow(parent)
{
setWindowTitle(tr("DockWindows"));
QTextEdit *te = new QTextEdit(this);
te->setText(QString::fromLocal8Bit("主窗口"));
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te);
//停靠窗口1
QDockWidget *dock = new QDockWidget(QString::fromLocal8Bit("停靠窗口1"), this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
QTextEdit *te1 = new QTextEdit();
te1->setText(QString::fromLocal8Bit("窗口1"));
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea, dock);
//停靠窗口2
dock = new QDockWidget(QString::fromLocal8Bit("停靠窗口2"), this);
dock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable);
QTextEdit *te2 = new QTextEdit();
te2->setText(QString::fromLocal8Bit("窗口2"));
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea, dock);
//停靠窗口3
dock = new QDockWidget(QString::fromLocal8Bit("停靠窗口3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);
QTextEdit *te3 = new QTextEdit();
te3->setText(QString::fromLocal8Bit("窗口3"));
dock->setWidget(te3);
addDockWidget(Qt::BottomDockWidgetArea, dock);
}
由上面代码可以看出,设置停靠窗口的一般步骤是:
1) 创建一个QDockWidget对象的停靠窗体;
2) 设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法;
3) 新建一个要插入停靠窗体的控件,常用的一般为QListWidget和QTextEdit;
4) 把控件插入停靠窗体中,调用QDockWidget的setWidget()方法;
5) 使用addDockWidget()方法在QMainWindow中加入此停靠窗体。
其中,setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:
void setAllowedAreas (Qt::DockWidgetAreas areas)
其中参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种:
Qt::LeftDockWidgetArea //左侧停靠
Qt::RightDockWidgetArea //右侧停靠
Qt::TopDockWidgetArea //顶端停靠
Qt::BottomDockWidgetArea //底部停靠
Qt::AllDockWidgetAreas //任意(以上四个)部位停靠
Qt::NoDockWidgetArea //只可停靠在插入处
setFeatures()方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种:
QDockWidget::DockWidgetClosable //停靠窗可关闭
QDockWidget::DockWidgetMovable //停靠窗可移动
QDockWidget::DockWidgetFloatable //停靠窗可浮动
QDockWidget::AllDockWidgetFeatures //拥有停靠窗的所有特性
QDockWidget::NoDockWidgetFeatures //停靠窗不可移动、不可关闭、不可浮动
========================工程pro文件========================
#-------------------------------------------------
#
# Project created by QtCreator 2010-08-17T22:46:43
#
#-------------------------------------------------
QT += core
TARGET = DockWindows
CONFIG += windows
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp /
dockwindows.cpp
HEADERS += /
dockwindows.h
=======================main函数===========================
#include <QtGui/QApplication>
#include "dockwindows.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
DockWindows window;
window.show();
return app.exec();
}