QT常见布局器使用
布局简介
为什么要布局?通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定,不方便后期修改和维护;在Qt里面布局分为四个大类 :
盒子布局:QBoxLayout
网格布局:QGridLayout
表单布局:QFormLayout
抽屉布局:QStackedLayout
QBoxLayout
一般使用它的两个子类QHBoxLayout 和 QVBoxLayout 负责水平和垂直布局
垂直布局示例:
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QWidget* w=new QWidget;setCentralWidget(w);//注意MainWindow不能直接进行布局QVBoxLayout* vlayout=new QVBoxLayout;QPushButton* b1=new QPushButton("b1");QPushButton* b2=new QPushButton("b2");QPushButton* b3=new QPushButton("b3");vlayout->addWidget(b1);vlayout->addStretch(1);//增加一个伸缩量vlayout->addWidget(b2);vlayout->addStretch(1);//增加一个伸缩量vlayout->addWidget(b3);vlayout->addStretch(2);//增加一个伸缩量centralWidget()->setLayout(vlayout);this->resize(300, 300);
}

水平布局示例:
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setWindowTitle("水平布局");QWidget* w=new QWidget;setCentralWidget(w);QHBoxLayout* hlayout=new QHBoxLayout;QPushButton* b1=new QPushButton("b1");QPushButton* b2=new QPushButton("b2");QPushButton* b3=new QPushButton("b3");hlayout->addWidget(b1);hlayout->addStretch(1);//增加一个伸缩量hlayout->addWidget(b2);hlayout->addStretch(1);//增加一个伸缩量hlayout->addWidget(b3);hlayout->addStretch(2);//增加一个伸缩量centralWidget()->setLayout(hlayout);this->resize(300, 300);
}

水平布局和垂直布局综合(可以结合QGroupBox容器进行布局):
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setWindowTitle("垂直布局");QWidget* w=new QWidget;setCentralWidget(w);QVBoxLayout* container=new QVBoxLayout;QGroupBox *hobby_box = new QGroupBox("爱好");QVBoxLayout* v_layout=new QVBoxLayout;QRadioButton* btn1 = new QRadioButton("抽烟");QRadioButton* btn2 = new QRadioButton("喝酒");QRadioButton* btn3 = new QRadioButton("玩乐");v_layout->addWidget(btn1);v_layout->addWidget(btn2);v_layout->addWidget(btn3);hobby_box->setLayout(v_layout);QGroupBox* gender_box = new QGroupBox("性别");QHBoxLayout* h_layout = new QHBoxLayout();QRadioButton* btn4 = new QRadioButton("男");QRadioButton* btn5 = new QRadioButton("女");h_layout->addWidget(btn4);h_layout->addWidget(btn5);gender_box->setLayout(h_layout);container->addWidget(hobby_box);container->addWidget(gender_box);centralWidget()->setLayout(container);this->resize(300, 300);
}

QGridLayout
网格布局,有的人称之为九宫格布局;示例如下:
#include "mainwindow.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGroupBox>
#include <QRadioButton>
#include <QStringList>
#include <QLineEdit>
#include <QGridLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this->setWindowTitle("网格布局");QWidget* w=new QWidget;setCentralWidget(w);QVBoxLayout* container=new QVBoxLayout;QPushButton* m_buttons[20];const char* btnText[20] ={"7", "8", "9", "+", "(","4", "5", "6", "-", ")","1", "2", "3", "*", "<-","0", ".", "=", "/", "C"};QLineEdit* edit = new QLineEdit();edit->setPlaceholderText("请输入内容");QGridLayout* grid = new QGridLayout();int line_number = 0;int col_number = 0;for(line_number = 0;line_number < 4;line_number++){// 此时line_number是第几行for(col_number = 0;col_number < 5;col_number++){// 此时col_number是第几列m_buttons[line_number*5 + col_number] = new QPushButton();m_buttons[line_number*5 + col_number]->setText(btnText[line_number*5 + col_number]);grid->addWidget(m_buttons[line_number*5 + col_number], line_number, col_number);}}container->addWidget(edit);container->addLayout(grid);centralWidget()->setLayout(container);this->resize(300, 300);
}

QFormLayout
一般适用于提交数据form表单。比如: 登录,注册类似的场景
QStackedLayout
提供了多页面切换的布局,一次只能看到一个界面。 抽屉布局
相关文章:
QT常见布局器使用
布局简介 为什么要布局?通过布局拖动不影响鼠标拖动窗口的效果等优点.QT设计器布局比较固定,不方便后期修改和维护;在Qt里面布局分为四个大类 : 盒子布局:QBoxLayout 网格布局:QGridLayout 表单布局&am…...
政安晨:【深度学习部署】—— TensorFlow Extended(TFX)介绍
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 前言 TensorFlow Extended(TFX&a…...
宝石与石头
宝石与石头 链接:https://leetcode.cn/problems/jewels-and-stones/description/ 给你⼀个字符串 jewels 代表石头中宝石的类型,另有⼀个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了⼀种你拥有的石头的类型,你想知道你拥有的石头中有多…...
【Vue3之computed属性(四)】
文章目录 前言一、computed属性有缓存二、使用方法三、修改全名 前言 理解computed属性,实现输入姓和名得出全名并双向绑定,区分单向绑定和双向绑定。测试computed属性和方法的区别 一、computed属性有缓存 先引入computed,写箭头函数定义并…...
生产力工具|安装更新R软件(R、studio)
内容介绍: 安装R软件: 下载 R X64 3.5.1: 访问官方R网站 https://cran.r-project.org/。选择适合Windows版本的安装包。将安装包下载到您的计算机。 本地安装: 运行下载的“R-3.5.1-win.exe”文件。按照安装向导,选择安装路径,取消…...
ffmpeg实现媒体流解码
本期主要讲解怎么将MP4媒体流的视频解码为yuv,音频解码为pcm数据;在此之前我们要先了解解复用和复用的概念; 解复用:像mp4是由音频和视频组成的(其他内容流除外);将MP4的流拆分成视频流(h264或h265等)和音频流(AAC或mp3等); 复用:就是将音频和视频打包成MP4或者fl…...
面试题 之 react
1.说说对react的理解 1️⃣是什么 React是用于构建用户界面的 JavaScript 库,遵循组件设计模式、声明式编程范式和函数式编程概念,更高效使用虚拟 DOM 来有效地操作 DOM ,遵循从高阶组件到低阶组件的单向数据流。 react 类组件使用一个名为 render() 的方…...
k8s笔记27--快速了解 k8s pod和cgroup的关系
k8s笔记27--快速了解 k8s pod和 cgroup 的关系 介绍pod & cgroup注意事项说明 介绍 随着云计算、云原生技术的成熟和广泛应用,K8S已经成为容器编排的事实标准,学习了解容器、K8S技术对于新时代的IT从业者显得极其重要了。 之前在文章 docker笔记13–…...
android Fragment 生命周期 方法调用顺序
文章目录 Introlog 及结论代码 Intro 界面设计:点击左侧按钮,会将右侧 青色的RightFragment 替换成 黄色的AnotherRightFragment,而这两个 Fragment 的生命周期方法都会打印日志。 所以只要看执行结果中的日志,就可以知道 Fragme…...
python写爬虫爬取京东商品信息
工具库 爬虫有两种方案: 第一种方式是使用request模拟请求,并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器,selenium自动化操作无头浏览器,由无头浏览器实现请求,对得到的数据进行解析。 第一种方…...
使用Linux别名简化命令输入
Linux定义命令别名,解决经常重复输入长命令 在Linux环境下工作时,我们经常需要输入长长的命令,这不仅耗时而且容易出错。Linux提供了一种名为“别名(alias)”的功能,可以让我们为这些长命令定义简短的名称…...
34.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-登录数据包的监视与模拟
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:33.游戏登录数据…...
rust - 对文件夹进行zip压缩加密
本文提供了一种对文件夹进行zip压缩并加密的方法。 添加依赖 cargo add anyhow cargo add walkdir cargo add zip cargo add zip-extensions计算文件夹的大小 目的是对需要压缩的文件夹的大小做一个限制。当然如果资源足够的话,可以去掉此限制。 let mut total_s…...
ETL数据倾斜与资源优化
1.数据倾斜实例 数据倾斜在MapReduce编程模型中比较常见,由于key值分布不均,大量的相同key被存储分配到一个分区里,出现只有少量的机器在计算,其他机器等待的情况。主要分为JOIN数据倾斜和GROUP BY数据倾斜。 1.1GROUP BY数据倾…...
Python的asyncio:异步编程的利器
在Python中,asyncio模块为开发者提供了强大的异步编程支持,使得编写高效且并发的代码变得更加容易。本文将深入探讨asyncio的核心概念、工作原理以及如何快速入门,通过文字与代码结合,带您领略异步编程的魅力。 1. 协程与事件循环…...
nodejs+vue高校奖助学金系统python-flask-django-php
高校奖助学金系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来,…...
已解决redis.clients.jedis.exceptions.JedisMovedDataException异常的正确解决方法,亲测有效!!!
已解决redis.clients.jedis.exceptions.JedisMovedDataException异常的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 使用JedisCluster自动处理MOVED错误 手动更新客户端缓存 总结 博主vÿ…...
政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化
政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! Dropout和批归一化是深度学习领域中常用的正则化技术…...
nodejs+vue高校会议室预订管理系统python-flask-django-php
伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套高校会议室预订管理系统,帮助学校进行会议…...
文件夹读取不到文件:深度解析与高效恢复策略
一、遭遇文件夹读取难题:文件离奇失踪 在日常使用电脑或移动设备的过程中,我们有时会遇到一个令人头疼的问题:原本存储着重要数据的文件夹突然变得“空空如也”,其中的文件仿佛凭空消失一般,无法正常读取。这种文件夹…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
