QDockWidget

  上节我们引出了QDockWidget的概念,这节进行讲解并加以引用。

  常用函数:
  1、addDockWidget:添加停靠控件,用于指定或更改停靠控件的位置以及方向。

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)
void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget, Qt::Orientation orientation)

  2、splitDockWidget:分割窗口,用于对两个QDockWidget进行水平或垂直布局。

void QMainWindow::splitDockWidget(QDockWidget * first, QDockWidget * second, Qt::Orientation orientation)

  3、tabifyDockWidget:合并窗口,用于将多个QDockWidget叠加到同一区域。

void QMainWindow::tabifyDockWidget(QDockWidget * first, QDockWidget * second)

  4、setDockNestingEnabled:是否允许嵌套布局

void QMainWindow::setDockNestingEnabled(bool enabled)


设置嵌套布局

  在自编软件中,博主用到了9个QDockWidget,作为软件的基本窗口进行布局。下面介绍创建布局的方法。

  首先是去除中央窗体(这是重点)。QMainWindow中自带中央窗体,如果不去除的话,可能会造成窗口间有空块的情况,大家可以自行尝试。去除后,所有窗口都由QDockWidget构成。

// cpp
QWidget* p = takeCentralWidget();   //删除中央窗体
if (p)delete p;setDockNestingEnabled(true);        //允许嵌套dock

创建多个窗口

  首先对setFeatures函数内的参数进行解释。

dock->setFeatures(QDockWidget::DockWidgetMovable); // 设置可移动
dock->setFeatures(QDockWidget::DockWidgetFloatable); // 设置可浮动
dock->setFeatures(QDockWidget::DockWidgetClosable); // 设置可关闭
dock->setFeatures(QDockWidget::AllDockWidgetFeatures); // 以上三种都包含

  如果想对窗口大小进行限制呢?QDockWidget也有相应的函数。

dock ->setFixedWidth(int w);
dock ->setFixedHeight(int h);
dock ->setFixedSize(int w, int h);dock ->setMinimumWidth(int minw);
dock ->setMinimumHeight(int minh);
dock ->setMinimumSize(int minw, int minh)dock ->setMaximumWidth(int maxw);
dock ->setMaximumHeight (int maxh);
dock ->setMaximumSize(int maxw, int maxh)

  实现代码:

// 头文件
QDockWidget *dock_Image;    // 图像窗口
QDockWidget* dock_Tool;// 工具箱窗口
QDockWidget* dock_Geom;// 几何变换窗口
QDockWidget* dock_Gray;// 灰度变换窗口
QDockWidget* dock_Enhance;// 图像增强窗口
QDockWidget* dock_Morp;// 形态学处理窗口
QDockWidget* dock_Color;// 颜色模型窗口
QDockWidget* dock_Prop;// 属性窗口
QDockWidget* dock_Output;// 输出窗口
// cpp
// QDockWidget* dock_Image = new QDockWidget(tr("图像"), this);               // 上节中已定义,如果只想做本节内容,可取消注释
dock_Image->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);         // 设置为可移动可浮动,但不可关闭
dock_Image->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);  // 可移动范围:左右
dock_Image->setMinimumSize(600, 600);   // 设置最小宽高dock_Tool = new QDockWidget(tr("工具箱"), this);           // 工具箱窗口,若想设置特征或移动范围,方法同上。
dock_Geom = new QDockWidget(tr("几何变换"), this);          // 几何变换窗口
dock_Gray = new QDockWidget(tr("灰度变换"), this);          // 灰度变换窗口
dock_Enhance = new QDockWidget(tr("图像增强"), this);       // 图像增强窗口
dock_Morp = new QDockWidget(tr("形态学处理"), this);     // 形态学处理窗口
dock_Color = new QDockWidget(tr("颜色模型"), this);         // 颜色模型窗口
dock_Prop = new QDockWidget(tr("属性"), this);                // 属性窗口
dock_Output = new QDockWidget(tr("输出"), this);          // 输出窗口// 进行布局
setCentralWidget(dock_Image);       // 指定为中心窗口
addDockWidget(Qt::LeftDockWidgetArea, dock_Tool);
addDockWidget(Qt::BottomDockWidgetArea, dock_Output);
addDockWidget(Qt::RightDockWidgetArea, dock_Geom);
addDockWidget(Qt::RightDockWidgetArea, dock_Gray);
addDockWidget(Qt::RightDockWidgetArea, dock_Enhance);
addDockWidget(Qt::RightDockWidgetArea, dock_Morp);
addDockWidget(Qt::RightDockWidgetArea, dock_Color);
addDockWidget(Qt::RightDockWidgetArea, dock_Prop);// 分割窗口
splitDockWidget(dock_Tool, dock_Image, Qt::Horizontal);     // 水平
splitDockWidget(dock_Geom, dock_Output, Qt::Vertical);      // 垂直// 合并窗口
tabifyDockWidget(dock_Geom, dock_Gray);
tabifyDockWidget(dock_Gray, dock_Enhance);
tabifyDockWidget(dock_Enhance, dock_Morp);
tabifyDockWidget(dock_Morp, dock_Color);
tabifyDockWidget(dock_Output, dock_Prop);dock_Geom->raise();             // raise()函数可使指定窗口置于最前// connect(dock_Tool, SIGNAL(visibilityChanged(bool)), this, SLOT(isDockTool()));
// 当窗体隐藏或显示时,其信号为visibilityChanged(bool)函数,此处仅作简单演示,槽函数是自定义的,其他窗口同理。

  实现效果:

【QT】QT从零入门教程(六):QDockWidget停靠窗口相关推荐

  1. R语言七天入门教程六:文件相关操作

    R语言七天入门教程六:文件相关操作 一.文件的读写 R 语言作为统计学编程语言,常常需要处理大量数据,而这些数据通常会从文件中进行读取,因此文件读写在R语言中是非常重要的操作.在R语言中,用到最多的文 ...

  2. 【MATLAB Image Processing Toolbox 入门教程六】“导入、导出和转换”之“图像类型转换Ⅰ——在不同图像类型之间转换”

    [MATLAB Image Processing Toolbox 入门教程六] 1 gray2ind函数 2 ind2gray函数 3 mat2gray函数 4 rgb2gray函数 5 rgb2in ...

  3. QT界面:QDockWidget停靠窗口使用小结

    QDockWidget停靠窗口 Qt构建停靠窗口使用的是QDockWidget类. 窗口特性 停靠窗口特性可以通过setFeatures(QDockWidget::AllDockWidgetFeatu ...

  4. 无废话ExtJs 入门教程六[按钮:Button]

    无废话ExtJs 入门教程六[按钮:Button] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个按钮"提交"与重置.如下所示代码区的第6 ...

  5. 【QT】QT从零入门教程(一):图像处理自编软件

    自说自话   寒假有了闲暇时间,于是决定做一个实际点的项目.在此之前,一直想做一款软件,把自己所学过的知识融汇进去,以软件界面的形式呈现出来.此前接触过OpenCV,学C++也有一段时间了,正好想从零 ...

  6. 【QT】QT从零入门教程(十二):实现工具箱QButtonGroup

      工具箱有两种实现方式,一是运用工具栏QToolBar,二是运用QButtonGroup,在按钮组内创建多个QPushButton,每个按钮对应不同的槽函数.   本节的"工具箱" ...

  7. 【QT】QT从零入门教程(九):QT常用控件 [QSlider、QSpinBox、QComboBox、QRadioButton]

    QSlider 滑动条与QSpinBox微调框 (这里只贴出控件的基本用法,需要时再查阅资料.) QSlider *slider = new QSlider(Qt::Horizontal); // 创 ...

  8. 【QT】QT从零入门教程(五):图像文件操作 [新建打开保存]

      前文已经讲解了菜单栏.工具栏.任务栏的实现方法,下面我们对程序进行完善.实现功能为:为软件添加"文件"菜单,并在下拉列表上添加"新建". "打开& ...

  9. 【QT】QT从零入门教程(八):QT常用控件 [QLabel、QPushButton、QLineEdit、QTextEdit]

      本节介绍一些常用的控件,是在"图像处理自编软件"中用到的几种,包括QLabel.QPushButton.QLineEdit.QTextEdit.QSlider.QSpinBox ...

最新文章

  1. gis属性表怎么导成excel_第022篇:ArcGIS中将属性表直接导出为Excel的方法
  2. 实景三维系列4 | 为什么需要单体化
  3. Numpy 中 mean() 和 average() 的区别?(average可计算加权平均)
  4. CONCAT 联合查询
  5. 委托到Lambda的进化: ()= {} 这个lambda表达式就是一个无参数的委托及具体方法的组合体。...
  6. Kubernetes集群上的Apache Ignite和Spring第3部分:测试应用程序
  7. Java中的硬件事务性内存,或者为什么同步将再次变得很棒
  8. vue-todolist
  9. [PA 2014]Kuglarz
  10. .1 matlab,1 MATLAB集成环境
  11. php环行队列实现,java数组实现队列及环形队列实现过程解析
  12. python mro文件_Python中MRO
  13. winRAR 密码暴力破解/清除压缩文件密码工具
  14. 【编译原理】 CS143 斯坦福大学公开课 第一周:简介
  15. Eat Pray Love!
  16. 另一个伊甸专武,国际服用(手机随便做的,有点粗糙,见谅
  17. css做出京东登录界面
  18. 高通SIMLOCK研究
  19. 爬取起点小说总排行榜
  20. 秋天,小溪潺潺,古老的树上黄叶灿灿,阳光像一个魔法师,在树叶间流动,远山,云天,充满秋阳的光线。以此景观做一首诗...

热门文章

  1. python小人画爱心_使用Python画出小人发射爱心的代码
  2. springboot改文件头_SpringBoot配置文件常用配置示例
  3. hnu 暑期实训之相同生日
  4. 导致集群重启_园区网核心交换机S7706异常重启导致无线网络故障
  5. Python编程技巧合集
  6. 洛谷 P1908 逆序对(树状数组+离散化)
  7. Lucene使用与优化(转)
  8. supervisor+gunicorn部署python web项目
  9. Spring框架中XML配置文件注入集合(数组、LIST、MAP、SET)属性
  10. leetcode942. DI String Match