《ASCE1885的Qt学习记录》の停靠窗口

本文讲讲停靠窗口的使用吧,实例效果如下:

《ASCE1885的Qt学习记录》の停靠窗口

本实例实现的停靠窗口功能如下:停靠窗口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) 新建一个要插入停靠窗体的控件,常用的一般为QListWidgetQTextEdit

4) 把控件插入停靠窗体中,调用QDockWidgetsetWidget()方法;

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();

}