Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)

转载地址:点击打开链接



详细描述:

QDockWidget类提供了一个窗体部件,其可以停靠在QMainWindow,或其本身作为一个在桌面上的*窗口(也就是父窗体)。

QDockWidget类提供了dock widget的概念,dock widget也就是我们熟悉的工具面板或者是工具窗口。

Dock window是放置在QMainWindow窗口周围的dock widget区域中的小部件。

原文:

Detailed Description
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-level window on the desktop.
QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary windows placed in the dock widget area around the central widget in a QMainWindow.


图形描述如下:

Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)

Dock windows可以在几个区域中移动,或者是悬浮。该类提供的API允许程序员限制dock widgets的移动,悬浮和关闭,以及它可以被放置的区域。

原文:

Dock windows can be moved inside their current area, moved into new areas and floated (e.g., undocked) by the end-user. The QDockWidget API allows the programmer to restrict the dock widgets ability to move, float and close, as well as the areas in which they can be placed.


成员类型:

QDockWidget对象包含一些特性,例如:移动、悬浮、关闭等等,这些都是枚举类型。

Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)


创建停靠窗体的流程:

  • 创建一个QDockWidget对象的停靠窗体。

  • 设置此停靠窗体的属性,通常可以使用setFeatures()以及setAllowedAreas()两种方法。

  • 新建一个要插入停靠窗体的控件,常用的有QListWidget和QtextEdit。

  • 将控件插入停靠窗体,调用QDockWidget()和setWidget()成员函数。

  • 使用addDockWidget()方法,在MainWindow中加入此停靠窗体。

实例:

  • 窗口1可以在左边和右边移动;

  • 窗口2 没有相关的任何特性;

  • 窗口3具有相关的所有特性;

步骤:

1、新建GUI应用,项目名自定义,基类选择QMainWindow,注意要取消"创建界面"复选框。

MainWindow类构造函数的说明:

[cpp] view plain copy
 print?
  1. class MainWindow : public QMainWindow  
  2. {  
  3.     Q_OBJECT  
  4.   
  5. public:  
  6.     MainWindow(QWidget *parent = 0);  
  7.     ~MainWindow();  
  8. };  

2、MainWindow.cpp文件,也就是MainWindow类构造函数的实现,代码如下:

[cpp] view plain copy
 print?
  1. #include "mainwindow.h"  
  2. #include <QTextEdit>  
  3. #include <QDockWidget>  
  4. MainWindow::MainWindow(QWidget *parent)  
  5.     : QMainWindow(parent)  
  6. {  
  7.     setWindowTitle(tr("DockWidget"));  
  8.     QTextEdit *text = new QTextEdit(this);  
  9.     text->setText(tr("主窗口"));  
  10.     text->setAlignment(Qt::AlignCenter);  
  11.     setCentralWidget(text);  
  12.   
  13.     QDockWidget *dock = new QDockWidget(tr("DockWindow1"),this);  
  14.     dock->setFeatures(QDockWidget::DockWidgetMovable); //指定停靠窗体的样式,此处为可移动  
  15.     dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);  
  16.     QTextEdit *text1 = new QTextEdit();  
  17.     text1->setText(tr("窗口一"));  
  18.     dock->setWidget(text1);  
  19.     addDockWidget(Qt::RightDockWidgetArea,dock);  
  20.   
  21.     dock = new QDockWidget(tr("DockWindow2"),this);  
  22.     dock->setFeatures(QDockWidget::NoDockWidgetFeatures); //没有相关的权限  
  23.     QTextEdit *text2 = new QTextEdit();  
  24.     text2->setText(tr("窗口二"));  
  25.     dock->setWidget(text2);  
  26.     addDockWidget(Qt::RightDockWidgetArea,dock);  
  27.   
  28.     dock = new QDockWidget(tr("DockWindow3"),this);  
  29.     dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //具有全部特性  
  30.     QTextEdit *text3 = new QTextEdit();  
  31.     text3->setText(tr("窗口三"));  
  32.     dock->setWidget(text3);  
  33.     addDockWidget(Qt::RightDockWidgetArea,dock);  
  34.   
  35. }  
  36.   
  37. MainWindow::~MainWindow()  
  38. {  
  39.   
  40. }  

3、主函数中的代码如下:

[cpp] view plain copy
 print?
  1. #include "mainwindow.h"  
  2. #include <QApplication>  
  3. #include <QFont>  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     QFont font("楷体",20,QFont::Bold);  
  8.     a.setFont(font);  
  9.   
  10.     MainWindow w;  
  11.     w.show();  
  12.     w.setFixedSize(600,400);    //设置窗体为固定的大小,防止用户通过拖拽改变其大小  
  13.     return a.exec();  
  14. }  

4、运行效果如下:

Qt布局管理: 停靠窗口QDockWidget类(纯代码实现)