Qt5之布局管理之分割窗口、停靠窗口、堆栈窗口
一、分割窗口
效果图
分割窗口功能的实现非常简单,这里通过代码实现分割窗口,效果图如下:
代码及说明
#include "QtWidgetsApplication1.h"
#include <QtWidgets/QApplication>
#include <QSplitter>
#include <QTextEdit>int main(int argc, char *argv[])
{QApplication a(argc, argv);QFont font("ZYSong18030", 12);a.setFont(font);QSplitter* splitterMain = new QSplitter(Qt::Horizontal,0);QTextEdit* textLeft = new QTextEdit(QObject::tr("left widget"), splitterMain);textLeft->setAlignment(Qt::AlignCenter);QSplitter* splitterRight = new QSplitter(Qt::Vertical, splitterMain);// true-拖拽分割条时,分割条位置根据拖动位置实时更新splitterRight->setOpaqueResize(true);QTextEdit* textUp = new QTextEdit(QObject::tr("top widget"), splitterRight);textUp->setAlignment(Qt::AlignCenter);QTextEdit* textButtom = new QTextEdit(QObject::tr("buttom widget"), splitterRight);textButtom->setAlignment(Qt::AlignCenter);// 0-是控件序号,根据插入顺序排序;1-大于0,为可伸缩splitterMain->setStretchFactor(0, 1);splitterMain->setWindowTitle(QObject::tr("splitter"));splitterMain->show();return a.exec();
}
其中:
QFont font(“ZYSong18030”, 12)、a.setFont(font):指定显示字体。
QSplitter* splitterMain = new QSplitter(Qt::Horizontal,0):新建一个QSplitter类对象,作为主分割窗口,设定此分割窗口为水平分割窗口。
QTextEdit* textLeft = new QTextEdit(QObject::tr(“left widget”), splitterMain):新建一个QTextEdit类对象,并将其插入主分割窗口中。
textLeft->setAlignment(Qt::AlignCenter):设定QTextEdit中文字的对齐方式,常用的对其方式有以下几种:
enum AlignmentFlag {AlignLeft = 0x0001,AlignRight = 0x0002,AlignHCenter = 0x0004,AlignTop = 0x0020,AlignBottom = 0x0040,AlignVCenter = 0x0080,AlignCenter = AlignVCenter | AlignHCenter}
QSplitter* splitterRight = new QSplitter(Qt::Vertical, splitterMain):新建一个QSplitter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
splitterRight->setOpaqueResize(true):调用setOpaqueResize方法用于设定分割窗口的分割条在拖拽时是否实时更新显示,若设为true则实时更新显示,若设为false则在拖拽时只显示一条灰色的粗线条,在拖拽到位并释放鼠标后再显示分割条。默认设置为true.
splitterMain->setStretchFactor(0, 1):该方法用于设定可伸缩控件,它的第一个参数用于指定设置的控件序号,,控件序号按插入的先后顺序从0开始依次编号;第二个参数为大于0的值,表示此控件为可伸缩控件,当整个对话框的宽度发生改变时,左边的窗口宽度会随着整个对话框大小的改变进行调整。
二、停靠窗口
效果图
代码及说明:
头文件
#pragma once#include <QtWidgets/QMainWindow>
class DockWindow : public QMainWindow
{Q_OBJECTpublic:DockWindow(QWidget *parent = nullptr);~DockWindow(){}};
源文件
#include "DockWindow.h"
#include <QDockWidget>
#include <QTextEdit>DockWindow::DockWindow(QWidget *parent): QMainWindow(parent)
{setWindowTitle(tr("DockWindows"));QTextEdit* te = new QTextEdit(this);te->setText(tr("Main Window"));te->setAlignment(Qt::AlignCenter);setCentralWidget(te);// 停靠窗口1QDockWidget* dock = new QDockWidget(tr("DockWindow1"), this);dock->setFeatures(QDockWidget::DockWidgetMovable);dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);QTextEdit* te1 = new QTextEdit();te1->setText(tr("window1,1111"));dock->setWidget(te1);addDockWidget(Qt::RightDockWidgetArea, dock);// 停靠窗口2dock = new QDockWidget(tr("DockWindow2"), this);dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);QTextEdit* te2 = new QTextEdit();te2->setText(tr("window2,2222"));dock->setWidget(te2);addDockWidget(Qt::RightDockWidgetArea, dock);// 停靠窗口3dock = new QDockWidget(tr("DockWindow3"), this);dock->setFeatures(QDockWidget::AllDockWidgetFeatures);QTextEdit* te3 = new QTextEdit();te3->setText(tr("window3,3333"));dock->setWidget(te3);addDockWidget(Qt::RightDockWidgetArea, dock);
}#include "stackWidget.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);DockWindow w;w.show();return a.exec();
}
其中
dock->setWidget(te1):将控件te1插入停靠窗体
使用addDockWidget方法在MainWindow中加入此停靠窗体
setFeatures()方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数QDockWidget::DockWidgetFeatures 指定停靠窗体的特性,包括以下几种参数
enum DockWidgetFeature {DockWidgetClosable = 0x01, // 停靠窗口可关闭DockWidgetMovable = 0x02, // 停靠窗口可移动DockWidgetFloatable = 0x04, // 停靠窗口可浮动DockWidgetVerticalTitleBar = 0x08, // 停靠窗口标题侧面显示DockWidgetFeatureMask = 0x0f,AllDockWidgetFeatures = DockWidgetClosable|DockWidgetMovable|DockWidgetFloatable, // ### Qt 6: removeNoDockWidgetFeatures = 0x00, // 不可移动,不可关闭,不可浮动。}
setAllowedAreas方法设置停靠窗体可停靠的区域,原型如下
void setAllowedAreas(Qt::DockWidgetAreas areas);
参数Qt::DockWidgetAreas指定了停靠窗口可停靠的区域,包括以下几种参数:
enum DockWidgetArea {LeftDockWidgetArea = 0x1, // 左侧停靠RightDockWidgetArea = 0x2, // 右侧停靠TopDockWidgetArea = 0x4, // 顶端停靠BottomDockWidgetArea = 0x8, // 底部停靠DockWidgetArea_Mask = 0xf,AllDockWidgetAreas = DockWidgetArea_Mask, // 以上4个部位停靠NoDockWidgetArea = 0 // 只可停靠插入处}
三、堆栈窗体
效果图
代码及说明
头文件
#pragma once#include <QtWidgets/QWidget>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>class stackWidget : public QWidget
{Q_OBJECTpublic:stackWidget(QWidget *parent = nullptr);~stackWidget(){}private:QListWidget* list;QStackedWidget* stack;QLabel* label1;QLabel* label2;QLabel* label3;
};
源文件
#include "stackWidget.h"
#include <QHBoxLayout>stackWidget::stackWidget(QWidget *parent): QWidget(parent)
{setWindowTitle(tr("stackedWidget"));list = new QListWidget(this);list->insertItem(0, tr("window1"));list->insertItem(1, tr("window2"));list->insertItem(2, tr("window3"));label1 = new QLabel(tr("WindowTest1"));label2 = new QLabel(tr("WindowTest2"));label3 = new QLabel(tr("WindowTest3"));stack = new QStackedWidget(this);stack->addWidget(label1);stack->addWidget(label2);stack->addWidget(label3);QHBoxLayout* mainLayout = new QHBoxLayout(this);mainLayout->setMargin(5); // 设置边距为5mainLayout->setSpacing(5); // 设置各控件之间的间距为5mainLayout->addWidget(list);mainLayout->addWidget(stack, Qt::AlignHCenter);mainLayout->setStretchFactor(list, 1);mainLayout->setStretchFactor(stack, 3);connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));
}#include "stackWidget.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);stackWidget w;w.show();return a.exec();
}
Qt5之布局管理之分割窗口、停靠窗口、堆栈窗口相关推荐
- 第3章 Qt 5布局管理
一.分割窗口QSplitter类 [例](简单)(CH301)一个十分简单的分割窗口功能,整个窗口由三个子窗口组成,各个子窗口之间的大小可随意拖曳改变,效果如图3.1所示. 本实例采用编写代码的方式实 ...
- Java-GUI LayoutManager布局管理器
目录 一.FlowLayout 介绍: 代码演示: 二.BorderLayout 介绍: 代码演示1: 代码演示2: 三.GridLayout 介绍: 代码演示: 四.GridBagLayout 介绍 ...
- LayoutManager布局管理器:FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout、BoxLayout
推荐阅读:Java图形界面详解(AWT.Swing) 专栏 文章目录 概述 FlowLayout 概述.构造器 代码示例 BorderLayout 概述.构造器 代码示例1 代码示例2 GridLay ...
- Java GridLayout(网格布局)布局管理器
GridLayout(网格布局) GridLayout 布局管理器将容器分割成纵横线分隔的网格 , 每个网格所占的区域大小相同.当向使用 GridLayout 布局管理器的容器中添加组件时, 默认 ...
- [Qt] 迷宫随机生成和自动寻路算法、布局管理器、动态效果、界面切换、播放音频【迷宫、魔塔、超级玛丽】 -C++课程设计:Qt实现的迷宫与地牢游戏
基于QT的迷宫与地牢小游戏开发 首先贴出链接: 完整Qt源码:点击进入https://download.csdn.net/download/qq_43365825/11852112 发布可执行程序:点 ...
- FlowLayout流式布局管理器与网格布局GridLayout
总结 1.继承JFrame类 2.在最上方定义组件 3.在构造方法中创建组件 4.在构造方法中添加组件 5.设置窗体属性 6.显示窗体 7.在主函数中创建对象 所有布局管理器都可以添加任意组件 (滚动 ...
- qt 图片适应窗口_Qt图片自适应窗口控件大小
[ 如果要改变窗体的大小,它内部的控件一般不随它的变化而变化,内部部件怎么随窗体的大小而改变自身的大小呢?这里我们一般可以对窗口整体进行布局,我们要用到Layout 最近在用Qt设计一个小程序, ...
- QT5开发及实例学习之七布局管理
文章目录 前言 一.分割窗口QSplitter类 二.停靠窗口QDockWidget类 三.堆栈窗体QStackedWidget类 四.基本布局(QLayout) 前言 一.分割窗口QSplitter ...
- 如何管理3D制图软件停靠窗口?
3D制图软件中停靠窗口是指可以自由独立浮动的窗口或与其他窗口组合在一起的窗口.将停靠窗口放入适当的窗口位置中,会将放入窗口的工具添加到容器窗口中,并且表示最新放入的窗口的图标会显示在选项卡集中.在使用 ...
最新文章
- J2EE项目移植问题一
- 刚刚,ACM宣布三位深度学习之父共同获得2018年图灵奖!
- Silverlight在IIS中的配置
- 详解.NET Core 依赖注入生命周期
- 数据结构算法入门--链表
- 删除linux系统中的eth0.bak与多余的网卡
- oracle数据库集群采用的是形式,铁道部采用Oracle集群数据库进行TMIS系统“三级建库”...
- 记一个linux内核内存提权问题
- IPTV的QoE评价方法
- autotools 学习
- H264、H265编码概念及I帧P帧B帧
- html为民间 图标不见了,win7 电脑右下角的图标不见了 怎么弄
- 原创,呵呵(一张图看明白),USB转TTL、USB转串口、USB转232的区别
- Maven详细入门及教学视频推荐
- 仍是在思过崖攀爬的人
- wlop作品集_【图包】【wlop】作品合集
- 考研英语四附双语阅读:上海VS旧金山:谁的移动支付更出色?
- 带你全景俯瞰云原生与 kubernetes
- 鸿蒙应用开发学习|HarmonyOS工程介绍
- 基于OCRA软件实现密度泛函计算优化双分子体系的复现实验,以ABPA和Trp为例
热门文章
- QQ浏览器无法正常播放优酷视频的解决方法
- RabbitMQ(rabbitmq-delayed-message-exchange)实现延时任务
- 多个门店如何统一经营?什么是多门店系统?
- 四川师范大学信息与计算机科学,四川师范大学计算机科学学院-四川.pdf
- 计算机在医学的应用微博,计算机在医学领域的应用.pdf
- jquery html换行去掉,js/jquery去掉空格,回车,换行
- 华为mate30是安卓系统还是鸿蒙系统,鸿蒙系统将搭载在华为mate30上,仅国内发布,是取代安卓的节奏?...
- mac php mcrypt 安装,MacOSx下安装mcrypt
- 膝盖中了一箭之康复篇-两周年纪念
- 皮卡丘为什么不进化_为何皮卡丘没有进化成雷丘?本篇告诉你答案