QT C++ widget layout 嵌套 例子2

在上篇文章中描述了实中套虚(用setLayout),虚中套实(用addWidget)。

本文再加1条,虚中套虚(用addLayout)。

所谓虚中套虚,是layout 套 layout 。

另外用循环代码生成从左到右的相同结构界面。这是和拖拉GUI组件相比的优点之一。

                                             图1-效果

                                           图2-1 布局关系图1

  说明:按照实中套虚,虚中套实原则

                                        图2-1布局关系示意图2

                           说明:因为可以虚中套虚,省掉了图2-1中紫色部分

1.头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QString>
#include <QLineEdit>
//#include <QHBoxLayout>
#include <QGridLayout>
#include <QFrame>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
//定义了两个结构体,实现界面和数据分离
struct UserData//数据
{
    QString str;
};
struct UserPlot//界面显示组件,结构化后方便调整界面
{
    QWidget w;//外观上包含下面三个,实际上经过布局中继
    QLabel lb;
    QLineEdit le;
    QFrame *l;//分割线
};
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    Ui::Widget *ui;
    UserPlot up[3];//3个左到右排列
    UserData data[3];//3个,0对应上面的0,1对应上面的1,2对应上面的2
};
#endif // WIDGET_H
 

2.cpp文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QHBoxLayout *mainLayout = new QHBoxLayout;
    QGridLayout *subLayout0 = new QGridLayout;
    QGridLayout *subLayout1 = new QGridLayout;
    QGridLayout *subLayout2 = new QGridLayout;
    QGridLayout *subLayoutArray[3]= {subLayout0,subLayout1,subLayout2};
    QFrame *fp;
    data[0].str=QString("BeiJin");
    data[1].str=QString("ChongQin");
    data[2].str=QString("GuangZhou");
    for(int i=0;i<3;i++)//mainLayout布局里套了3个QWidget或layout
    {
        up[i].lb.setText(data[i].str);
        if (i<2)
        {   up[i].l=new QFrame(this);
            fp=up[i].l;//竖线
            fp->setFrameShape(QFrame::VLine);//竖线
            fp->setFrameShadow(QFrame::Sunken);//竖线
        }
        subLayoutArray[i]->addWidget(&up[i].lb,0,0,1,1,Qt::AlignTop);//每个QGridLayout里

                                                                                                         //套了QLabel
        subLayoutArray[i]->addWidget(&up[i].le,1,0,1,1,Qt::AlignTop);//每个QGridLayout里

                                                                                                         //套了QLineEdit
        if (i<2)
        subLayoutArray[i]->addWidget(fp,0,1,2,1);//每个QGridLayout里套了QFrame,

                                                                          //实际上是分割竖线
        //up[i].w.setLayout(subLayoutArray[i]);//每个QWidget里套了个QGridLayout
        //mainLayout->addWidget(&up[i].w);//上面一行与本行的效果,等效于下一行
        mainLayout->addLayout(subLayoutArray[i]);//layout 里 套 layout
        this->resize(400,100);
    }
    setLayout(mainLayout);//widget里套了个mainLayout布局
}

Widget::~Widget()
{
    delete ui;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/11958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记录接口请求偶发504 Gateway Time-out问题

项目场景&#xff1a; 我们将服务部署到A公司服务器中&#xff0c;使用了共五台服务器&#xff0c;分别是&#xff1a;1.NG服务器 2.日志服务器 3.缓存服务器 4.应用服务器1 5.应用服务器2 。而请求过来首先到达的是他们的物理代理服务器&#xff0c;然后再转发请求到我们的ng…

【Neo4jJDK开箱即用的安装全流程】

neo4j:命令行本地访问loclhost neo4j:命令行本地访问loclhost2 neo4j操作 Neo4j桌面版数据库导出导入 Neo4j安装与配置以及JDK安装与配置教程&#xff08;超详细&#xff09; Neo4j 安装、使用教程 Neo4j安装教程 Neo4J桌面版的配置和连接Pycharm jdk-neo对应版本 JDK ORACLE中…

数据结构(四)————二叉树和堆(中)

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一、堆的概念及结构二、堆的实现三.堆的应用 总结 前言 CSDN 这篇博客介绍了二叉树中的基本概念和存储结构&#xff0c;接下来我们将运用这些结构来实现二叉树 一、堆的概念及结构 1…

招聘公司要求跳槽时间间隔不能太短,我的简历不符合要求,怎么办?

很多招聘公司要求就很奇葩,什么三五原则,什么二一原则,意思就是,你几年内,不能在超过几家公司内任职。你就说多奇葩啊,他们都不能保证自己的员工在自己公司干多久,甚至裁掉刚干了半年的员工,也是他们干出来的事,然后他们还好意思有这种奇葩要求。 目录 1 虚假的双向选…

OpenPCDet算法的网络结构及工作原理

OpenPCDet是一个用于三维点云目标检测的开源算法库。它提供了完整的目标检测流程&#xff0c;包括数据预处理、网络模型、损失函数、后处理等。OpenPCDet基于PyTorch框架实现&#xff0c;并针对点云数据进行了深度优化&#xff0c;以实现高效的目标检测和定位。 OpenPCDet的目…

SpringMVC 注解详解

SpringMVC 注解详解 1. 引言 SpringMVC 是 Spring 框架中的 Web 层解决方案&#xff0c;它通过注解的方式来简化 MVC 模式的实现。本篇将详细介绍 SpringMVC 中常用的注解及其用法。 2. SpringMVC 注解分类 SpringMVC 的注解主要分为以下几类&#xff1a; 2.1 核心注解 C…

用sunoAI写粤语歌的方法,博主已经亲自实践可行

粤语歌还是很好听的&#xff0c;那么如何使用suno进行粤语歌的创作呢&#xff1f; 本文和大家进行分享下如何进行粤语歌曲的创作。 访问地址如下&#xff08;电脑端/手机端一个地址&#xff09;&#xff1a; ​https://suno3.cn/#/?i8NCBS8_WXTT 在微信浏览器中也可以直接…

css 案例 横向滚动渐变

效果 完整代码&#xff1a; <template><view class"content"><view class"tab"><view class"tab-item" v-for"(item,index) in tab" :key"index" click"handlerTab(index)":class"ind…

winserver系统设置图片查看器

新建 .bat 批处理执行文件&#xff0c;内容如下&#xff1a; echo off&cd&color 0a&cls echo Set Win10 Photo Viewer reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".jpg" /t REG_SZ /d Photo…

MySQL——利用变量进行查询操作

新建链接&#xff0c;自带world数据库&#xff0c;里面自带city表格。 DQL # MySQL利用变量进行查询操作 set cityNameHaarlemmermeer; select * from city where NamecityName;# 多个结果查询 set cityName1Haarlemmermeer; set cityName2Breda; set cityName3Willemstad; s…

Mysql--期末复习

目录 一.变量 1.系统变量 global session 2.用户自定义变量 3.局部变量 二.触发器 1.pysx函数(销售)拼音缩写触发器 2.goods维护(存储过程) 3.xkglxt 4.订单延期 一.变量 1.系统变量 global session 2.用户自定义变量 1.不用提前声明&#xff0c;使用时直接 变量…

古月居讲师/签约作者招募计划

机器人&#xff0c;作为一个集成了多学科技术的复杂系统&#xff0c;其开发过程充满了挑战。为了帮助开发者们更好地克服这些挑战&#xff0c;提升项目的开发效率和质量&#xff0c;古月居特别招募[博客签约作者/课程讲师]。如果您平常热爱记录、分享开发者经验的习惯&#xff…

Emby for Mac(轻松管理多媒体影音库)1.9.9中文版

Emby for Mac是一款强大的多媒体影音库管理工具&#xff0c;可以帮助用户轻松管理和浏览自己的影音资源。它可以将用户的个人视频、音乐和照片组合在一起&#xff0c;并将其流式传输到用户的设备上。 Emby for Mac 1.9.9中文版下载 Emby for Mac具有易于使用的界面&#xff0c;…

分布式与一致性协议之PBFT算法

在分布式系统中&#xff0c;数据的一致性是一个至关重要的问题。为了保证分布式系统中节点之间的数据一致性&#xff0c;人们提出了许多一致性协议和算法。 其中&#xff0c;PBFT&#xff08;Practical Byzantine Fault Tolerance&#xff0c;实用拜占庭容错&#xff09;算法是…

content-type之multipart/form-data和application/json比较

multipart/form-data 知识点: 用途: 主要用于文件上传以及包含非ASCII字符或二进制数据的表单数据提交。它将表单数据分割成多个部分&#xff0c;每个部分前都有一个boundary字符串作为分隔&#xff0c;可以包含文本字段和文件字段。结构: 包含了Content-Disposition头部&…

机器学习案例:加州房产价格(四)

参考链接&#xff1a;https://hands1ml.apachecn.org/2/#_12 数据探索和可视化、发现规律 通过之前的工作&#xff0c;你只是快速查看了数据&#xff0c;对要处理的数据有了整体了解&#xff0c;现在的目标是更深的探索数据。 首先&#xff0c;保证你将测试集放在了一旁&…

【Docker系列】Linux部署Docker Compose

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

RestTemplate接口请求发送json、form数据格式以及处理接口错误状态码400 null

在使用RestTemplate发送HTTP请求时&#xff0c;你可以通过不同的方式发送JSON或表单数据&#xff08;application/x-www-form-urlencoded&#xff09;。同时&#xff0c;处理接口错误状态码&#xff08;如400&#xff09;和返回null的情况也是很重要的。以下是一些示例代码&…

山东济南中国当代文化名人颜廷利:大自然赋予人类众生的真正贵重礼物

大自然赋予了众生---火&#xff08;太阳&#xff0c;万物生长靠太阳&#xff09;、水&#xff08;河流&#xff0c;水是生命之源&#xff09;、木&#xff08;空气&#xff0c;生命就在一翕一合的呼吸之间&#xff09;、土&#xff08;大地&#xff0c;坤为大地之母&#xff0c…

【Python】Python中类的__iter__()方法

在Python中&#xff0c;__iter__ 方法是一个特殊的方法&#xff0c;它用于定义一个对象的迭代器行为。这个方法是面向对象编程中实现可迭代对象&#xff08;即支持迭代的对象&#xff09;的一部分。当你创建一个类&#xff0c;并且希望其实例能够在例如 for 循环中被迭代时&…