当前位置: 首页 > news >正文

Qt中QLayout的用法(QGridLayout, QFormLayout, QStackedLayout)

Qt的布局类继承关系

在这里插入图片描述

在此仅简单介绍3种不常用的layout

QStackedLayout, QFormLayout , QGridLayout

在这里插入图片描述

实现代码

myLayouts.h

#pragma once

#include <QtWidgets/QWidget>
#include "ui_myLayouts.h"

class myLayouts : public QWidget
{
    Q_OBJECT

public:
    myLayouts(QWidget *parent = Q_NULLPTR);

private:
    Ui::myLayoutsClass ui;

    void initMyStackedLayout();
    void initMyFormLayout();
    void initMyGridLayout();

};

myLayouts.cpp

#include "myLayouts.h"
#include <QStackedLayout>
#include <QFormLayout>
#include <QBoxLayout>
#include <QGridLayout>

#include <QLabel>
#include <qlineedit.h>
#include <qspinbox.h>

myLayouts::myLayouts(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    initMyStackedLayout();
    initMyFormLayout();
    initMyGridLayout();
}
void myLayouts::initMyStackedLayout()
{
    QWidget* wgt1, * wgt2, * wgt3;
    wgt1 = new QWidget();
    wgt2 = new QWidget();
    wgt3 = new QWidget();
    wgt1->setStyleSheet("background:rgb(128,0,0)");
    wgt2->setStyleSheet("background:rgb(0,128,0)");
    wgt3->setStyleSheet("background:rgb(0,0,128)");

    QLabel* lb1, * lb2, * lb3;
    lb1 = new QLabel("Label1", wgt1);
    lb2 = new QLabel("Label2", wgt2);
    lb3 = new QLabel("Label3", wgt3);

    lb1->setStyleSheet("background:rgb(220,220,220)");
    lb2->setStyleSheet("background:rgb(170,170,170)");
    lb3->setStyleSheet("background:rgb(100,100,100)");

    QStackedLayout* slay = new QStackedLayout(ui.widget);
    slay->addWidget(wgt1);
    slay->addWidget(wgt2);
    slay->addWidget(wgt3);
    slay->setStackingMode(QStackedLayout::StackAll);
    QHBoxLayout* hlay = new QHBoxLayout;
    hlay->addLayout(slay);
    ui.widget->setLayout(hlay);

    ui.comboBox->addItem(tr("page1"));
    ui.comboBox->addItem(tr("page2"));
    ui.comboBox->addItem(tr("page3"));

    connect(ui.comboBox, SIGNAL(activated(int)), slay, SLOT(setCurrentIndex(int)));
}
void myLayouts::initMyFormLayout()
{
    QLineEdit* nameLineEdit1, * emailLineEdit1,*addrLineEdit1;
    nameLineEdit1 = new QLineEdit;
    emailLineEdit1 = new QLineEdit;
    addrLineEdit1 = new QLineEdit;

    QSpinBox* ageSpinBox1 = new QSpinBox;

    QFormLayout* formLayout = new QFormLayout;
    formLayout->addRow(tr("&Name1:"), nameLineEdit1);
    formLayout->addRow(tr("&Email1:"), emailLineEdit1);
    formLayout->addRow(tr("&Age1:"), ageSpinBox1);
    formLayout->addRow(tr("&Addr1:"), addrLineEdit1);

    ui.widget2->setLayout(formLayout);
}
void myLayouts::initMyGridLayout()
{

    QLineEdit* nameLineEdit, * emailLineEdit, * addrLineEdit;
    nameLineEdit = new QLineEdit;
    emailLineEdit = new QLineEdit;
    addrLineEdit = new QLineEdit;

    QSpinBox* ageSpinBox = new QSpinBox;

    QLabel* nameLabel, * emailLabel, * ageLabel, * addrLabel;

    nameLabel = new QLabel(tr("&Name:"));
    nameLabel->setBuddy(nameLineEdit);

    emailLabel = new QLabel(tr("&Email:"));
    emailLabel->setBuddy(emailLineEdit);

    ageLabel = new QLabel(tr("&Age:"));
    ageLabel->setBuddy(ageSpinBox);

    addrLabel = new QLabel(tr("&Addr:"));
    addrLabel->setBuddy(addrLineEdit);

    QGridLayout* gridLayout = new QGridLayout;
    gridLayout->addWidget(nameLabel, 0, 0);
    gridLayout->addWidget(nameLineEdit, 0, 1);
    gridLayout->addWidget(emailLabel, 1, 0);
    gridLayout->addWidget(emailLineEdit, 1, 1);
    gridLayout->addWidget(ageLabel, 2, 0);
    gridLayout->addWidget(ageSpinBox, 2, 1);
    gridLayout->addWidget(addrLabel, 3, 0);
    gridLayout->addWidget(addrLineEdit, 3, 1);
    ui.widget3->setLayout(gridLayout);
}

相关文章:

  • LVGL实现按钮互斥效果
  • PX4模块设计之二十八:RCInput模块
  • windows10安装蓝牙驱动方法步骤
  • SQL语句如何避免在mysql插入重复数据
  • JsonSchema 转换为 Typescript
  • 【区块链 | OpenZeppelin】手把手交易使用OpenZeppelin Upgrades部署可升级智能合约
  • 同一公司开发的多个软件,可以用同一张代码签名证书吗?
  • 深度分析:用户最喜欢用哪种NFT做头像
  • php 小数计算 结果变无限小数解决方案
  • WebRTC研究:丢包与抖动
  • freeswitch的3XX重定向
  • jsp+sql毕业生招聘系统免费系统+论文
  • Java毕业设计-火车订票管理系统
  • SwiftUI 界面状态 成员变量 @State @Buiding immutable
  • Java 进阶集合和数据结构
  • Angular6错误 Service: No provider for Renderer2
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JAVA SE 6 GC调优笔记
  • Java 内存分配及垃圾回收机制初探
  • MySQL几个简单SQL的优化
  • PHP 7 修改了什么呢 -- 2
  • Rancher如何对接Ceph-RBD块存储
  • Spring Cloud中负载均衡器概览
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 飞驰在Mesos的涡轮引擎上
  • 京东美团研发面经
  • 前端
  • 如何学习JavaEE,项目又该如何做?
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微信开源mars源码分析1—上层samples分析
  • 移动端 h5开发相关内容总结(三)
  • 用Canvas画一棵二叉树
  • 【干货分享】dos命令大全
  • 关于Android全面屏虚拟导航栏的适配总结
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​queue --- 一个同步的队列类​
  • ​一些不规范的GTID使用场景
  • ### RabbitMQ五种工作模式:
  • #include<初见C语言之指针(5)>
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (ZT)一个美国文科博士的YardLife
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET MVC第三章、三种传值方式
  • .net wcf memory gates checking failed
  • .net 获取url的方法
  • .net 微服务 服务保护 自动重试 Polly
  • .net 中viewstate的原理和使用
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET单元测试
  • .NET项目中存在多个web.config文件时的加载顺序
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?