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

时间:2021-07-23 05:27:28

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

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

}