Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解

news2025/1/20 17:12:24
  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

Qt布局系统(Layouts)

布局管理器基础

高级布局技巧

嵌套布局

设置间距和边距

常用控件详解

按钮类控件

QPushButton (标准按钮)

QRadioButton (单选按钮)

QCheckBox (复选框)

输入类控件

QLineEdit (单行输入)

QTextEdit (多行输入)

QSpinBox (数值输入)

显示类控件

QLabel (标签)

QProgressBar (进度条)

高级视图控件

Model-Based Views

QListView

QTreeView

Item-Based Widgets

QListWidget

QTableWidget

容器控件

QGroupBox

QTabWidget

QScrollArea

样式和外观

样式表

属性设置


Qt布局系统(Layouts)

布局管理器基础

Qt提供了强大的布局管理系统,用于自动管理控件的大小和位置。主要布局管理器包括:

  1. QHBoxLayout (水平布局)
    QHBoxLayout* hLayout = new QHBoxLayout;
    hLayout->addWidget(new QPushButton("按钮1"));
    hLayout->addWidget(new QPushButton("按钮2"));
    hLayout->addWidget(new QPushButton("按钮3"));
    this->setLayout(hLayout);

  1. QVBoxLayout (垂直布局)
    QVBoxLayout* vLayout = new QVBoxLayout;
    vLayout->addWidget(new QLabel("标签1"));
    vLayout->addWidget(new QLabel("标签2"));
    vLayout->addWidget(new QLabel("标签3"));
    this->setLayout(vLayout);

  1. QGridLayout (网格布局)
    QGridLayout* gridLayout = new QGridLayout;
    gridLayout->addWidget(new QPushButton("1"), 0, 0);
    gridLayout->addWidget(new QPushButton("2"), 0, 1);
    gridLayout->addWidget(new QPushButton("3"), 1, 0, 1, 2); // 跨列
    this->setLayout(gridLayout);

  1. QFormLayout (表单布局)
QFormLayout* formLayout = new QFormLayout;
    formLayout->addRow("姓名:", new QLineEdit);
    formLayout->addRow("年龄:", new QSpinBox);
    formLayout->addRow("简介:", new QTextEdit);
    this->setLayout(formLayout);

高级布局技巧

嵌套布局
    QVBoxLayout* mainLayout = new QVBoxLayout;
    QHBoxLayout* topLayout = new QHBoxLayout;

    topLayout->addWidget(new QPushButton("左"));
    topLayout->addWidget(new QPushButton("中"));
    topLayout->addWidget(new QPushButton("右"));

    mainLayout->addLayout(topLayout);
    mainLayout->addWidget(new QTextEdit);

    this->setLayout(mainLayout);
设置间距和边距
layout->setSpacing(10);              // 控件间距  
layout->setContentsMargins(10,10,10,10); // 边距

常用控件详解

按钮类控件

QPushButton (标准按钮)
QPushButton* btn = new QPushButton("点击我");  
btn->setIcon(QIcon(":/icons/click.png"));  
QRadioButton (单选按钮)
  // 创建按钮组
    QButtonGroup* group = new QButtonGroup(this);

    // 创建单选按钮
    QRadioButton* radio1 = new QRadioButton("选项1", this);
    QRadioButton* radio2 = new QRadioButton("选项2", this);

    // 将按钮添加到按钮组
    group->addButton(radio1);
    group->addButton(radio2);

    // 创建垂直布局
    QVBoxLayout* layout = new QVBoxLayout;

    // 将单选按钮添加到布局中
    layout->addWidget(radio1);
    layout->addWidget(radio2);

    // 设置布局
    setLayout(layout);
QCheckBox (复选框)
    QCheckBox* check = new QCheckBox("同意条款", this);
    connect(check, &QCheckBox::stateChanged, this, [](int state){
        qDebug() << "状态变更:" << state;
    });

输入类控件

QLineEdit (单行输入)
    QLineEdit* lineEdit = new QLineEdit(this);
    lineEdit->setPlaceholderText("请输入用户名");
    lineEdit->setMaxLength(20);
QTextEdit (多行输入)
    QTextEdit* textEdit = new QTextEdit(this);
    textEdit->setPlaceholderText("请输入描述");
    textEdit->setAcceptRichText(true);
QSpinBox (数值输入)
    QSpinBox* spinBox = new QSpinBox(this);
    spinBox->setRange(0, 100);
    spinBox->setSingleStep(5);
    spinBox->setValue(50);

显示类控件

QLabel (标签)
    QLabel* label = new QLabel(this);
    label->setText("Hello <b>Qt</b>");
    label->setTextFormat(Qt::RichText);
QProgressBar (进度条)
    QProgressBar* progressBar = new QProgressBar(this);
    progressBar->setRange(0, 100);
    progressBar->setValue(75);
    progressBar->setTextVisible(true);

高级视图控件

Model-Based Views

QListView
    QStringListModel* model = new QStringListModel;
    model->setStringList(QStringList() << "项目1" << "项目2" << "项目3");

    QListView* listView = new QListView(this);
    listView->setModel(model);
    listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
QTreeView
    QStandardItemModel* model = new QStandardItemModel;
    QStandardItem* parentItem = model->invisibleRootItem();
    parentItem->appendRow(new QStandardItem("父节点1"));
    parentItem->child(0)->appendRow(new QStandardItem("子节点1"));

    QTreeView* treeView = new QTreeView(this);
    treeView->setModel(model);

Item-Based Widgets

QListWidget
    QListWidget* listWidget = new QListWidget(this);
    listWidget->addItem("项目1");
    listWidget->addItem("项目2");
    listWidget->addItem("项目3");

    connect(listWidget, &QListWidget::itemClicked, this, [](QListWidgetItem* item){
        qDebug() << "选中:" << item->text();
    });
QTableWidget

    QTableWidget* tableWidget = new QTableWidget(3, 3, this);
    tableWidget->setHorizontalHeaderLabels({"列1", "列2", "列3"});
    tableWidget->setItem(0, 0, new QTableWidgetItem("单元格(0,0)"));

容器控件

QGroupBox

    QGroupBox* groupBox = new QGroupBox("选项组",this);
    QVBoxLayout* layout = new QVBoxLayout;
    layout->addWidget(new QRadioButton("选项1"));
    layout->addWidget(new QRadioButton("选项2"));
    groupBox->setLayout(layout);

QTabWidget

    QTabWidget* tabWidget = new QTabWidget(this);
    tabWidget->addTab(new QWidget, "标签1");
    tabWidget->addTab(new QWidget, "标签2");
    tabWidget->setTabPosition(QTabWidget::North);

样式和外观

样式表

// 按钮样式  
QString buttonStyle = R"(  
    QPushButton {  
        background-color: #4CAF50;  
        border: none;  
        color: white;  
        padding: 8px 16px;  
        border-radius: 4px;  
    }  
    QPushButton:hover {  
        background-color: #45a049;  
    }  
    QPushButton:pressed {  
        background-color: #3d8b40;  
    }  
)";  
button->setStyleSheet(buttonStyle);

属性设置

widget->setProperty("class", "primary");  
widget->setMinimumSize(100, 30);  
widget->setFont(QFont("Arial", 12));

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

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

相关文章

ingress-nginx代理tcp使其能外部访问mysql

一、helm部署mysql主从复制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解压后编辑values.yaml文件&#xff0c;修改如下&#xff08;storageclass已设置默认类&#xff09; 117 ## param architecture MySQL archit…

电梯系统的UML文档06

系统传感器 系统值是用于控制系统的。在类图中系统传感器用一个箭头和系统控制对象连接。 类图中的系统传感器包括AtFloor、电梯呼叫器、关门、开门、门反转、楼层呼叫器和驱动&#xff08;AtFloor&#xff0c;CarCall&#xff0c;DoorClosed&#xff0c;DoorOpen&#xff0c;…

低代码平台:技术复杂性的系统简化

在传统开发模式下&#xff0c;应用构建需要经历需求分析、代码开发、测试部署等多环节&#xff0c;流程繁琐且耗时&#xff0c;往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程&#xff0c;使开发者能够在较短时间内实现复杂的应用功能&#xf…

学生就业统计表

渲染业务 map 和 join 方法渲染页面 渲染业务 把数据存储到本地存储 删除业务 关于 stuId 的处理: 本来新增了两条数据&#xff0c;但是将 id 为 1 的数据删除了&#xff0c;现在只剩下 id 为 2 的数据&#xff0c;要新增的话 id 应该是 3 才对&#xff0c;但是实际上点击新增…

零基础构建最简单的 Tauri2.0 桌面项目 Star 88.4k!!!

目录 预安装环境 安装nodejs windows下安装 linux下安装 nodejs常遇问题 安装C环境 介绍 下载 安装 安装Rust语言 Tauri官网 安装 vscode 安装 rust 插件 安装 Tauri 插件 运行成果 预安装环境 安装nodejs windows下安装 NodeJs_安装及下载_哔哩哔哩_bilibi…

最小二乘估计图像复原

图像复原中的最小二乘估计 假设我们有一个原始图像 f \bm{f} f&#xff0c;它经过了一个线性退化过程&#xff08;例如&#xff0c;卷积与加性噪声&#xff09;&#xff0c;产生了观测到的退化图像 g \bm{g} g&#xff1a; g H f n \bm{g} \bm{H}\bm{f} \bm{n} gHfn 这里…

【Hadoop面试题2025】

文章目录 简单题故障及相应的处理方法中等难度高难度小文件小文件的产生小文件问题的影响小文件治理方案推荐方案 冷文件冷文件的产生冷文件问题的影响冷文件治理方案推荐方案 简单题 一、基础概念类 什么是Hadoop&#xff1f; 答案&#xff1a;Hadoop是一个开源的分布式计算框…

低代码运维与管理服务

文章目录 前言一、服务内容二、服务范围三、服务流程四、服务交付件五、责任矩阵六、验收标准 前言 随着云计算技术的发展&#xff0c;数字化转型是企业的必然选择&#xff0c;企业需要实现广泛的连接并走向开放&#xff0c;传统集成工具无法满足当前企业面临的数字化转型诉求…

RV1126+FFMPEG推流项目(9)AI和AENC模块绑定,并且开启线程采集

前面两篇已经交代AI和AENC模块的配置&#xff0c;这篇就让这两个模块绑定起来&#xff0c;绑定的原因是&#xff0c;Aenc从Ai模块拿到采集的原始数据进行编码。 使用 RK_MPI_SYS_Bind 把 AI 节点和 AENC 进行绑定&#xff0c;其中 enModId 是模块 ID 号选择的是 RK_ID_AI、s32C…

基于Qt开发的截屏软件已发布

目前还只是预览版&#xff0c;截屏的基础功能都已完成&#xff0c;后续将继续完善。 CSDN下载地址&#xff1a;https://download.csdn.net/download/LeoLei8060/90288234 github代码&#xff08;也可以下载发布程序&#xff09;&#xff1a;https://github.com/LeoLei8060/QS…

Spring Web MVC综合案例

承接上篇文章——Spring Web MVC探秘&#xff0c;在了解Spring Web MVC背后的工作机制之后&#xff0c;我们接下来通过三个实战项目&#xff0c;来进一步巩固一下前面的知识。 一、计算器 效果展示&#xff1a;访问路径&#xff1a;http://127.0.0.1:8080/calc.html 前端代码&a…

数据结构与算法面试专题——引入及归并排序

数据结构与算法引入 我们都知道数据结构与算法很重要&#xff0c;甚至会将其称为程序员的“内功”&#xff0c;但是我们花了很多时间学的算法和数据结构&#xff0c;好像就只是为了应对算法面试&#xff0c;对日常的开发工作没有什么帮助。 这点对于我们数据工程师来说&#…

OpenHarmony 4.1 SDK11 北向应用开发笔记

目录 声明 1、开启其他应用 2、延时切换页面 3、设置页面切换效果 4、设置背景图片和背景铺满屏幕 5、设置隐藏状态和导航条 6、设置组件大小和对齐方式 7、设置按钮类型改变按钮边框圆角半径 8、常用布局方式 9、布局技巧 声明 本笔记基于OpenHarmony 4.1 SDK11&am…

【Linux】进程的程序替换

前言&#xff1a; 在未进行进程的程序替换时&#xff0c;父子进程的数据是独立的通过页表进行映射进行实现进程数据的独立性&#xff0c;但是父子进程的代码还是共享的&#xff0c;我父进程将子进程进行创建出来不仅仅只会有父子进程只进行执行共享代码的需求&#xff0c;有的…

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件&#xff1a; cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错&#xff1a; 修改vue.config.jsconst { defineConfig }…

Asp .Net Core 实现微服务:集成 Ocelot+Nacos+Swagger+Cors实现网关、服务注册、服务发现

什么是 Ocelot ? Ocelot是一个开源的ASP.NET Core微服务网关&#xff0c;它提供了API网关所需的所有功能&#xff0c;如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关&#xff0c;它可以与现有的服务集成&#xff0c;并帮助您保护、监控和扩展您的…

【机器学习实战入门】使用Pandas和OpenCV进行颜色检测

Python 颜色检测项目 今天的项目将非常有趣和令人兴奋。我们将与颜色打交道&#xff0c;并在项目过程中学习许多概念。颜色检测对于识别物体来说是必要的&#xff0c;它也被用作各种图像编辑和绘图应用的工具。 什么是颜色检测&#xff1f; 颜色检测是检测任何颜色名称的过程…

如何实现文本相关的显示功能

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了页面之间传递数据相关的内容,本章回中将介绍如何使用Text Widget。闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 概念介绍 我们在这里说的Text Widget就是显示文字内容的组件&#xff0c;其实我们一直在…

精度论文:【Focaler-IoU: More Focused Intersection over Union Loss】

Focaler-IoU: 更聚焦的交并比损失 Focaler-IoU: More Focused Intersection over Union Loss Focaler-IoU: 更聚焦的交并比损失I. 引言II. 相关工作III. 方法IV. 实验V. 结论 原文地址&#xff1a;官方论文地址 代码地址&#xff1a;官方代码地址 摘要——边界框回归在目标检…

计算机组成原理--笔记二

目录 一.计算机系统的工作原理 二.计算机的性能指标 1.存储器的性能指标 2.CPU的性能指标 3.系统整体的性能指标&#xff08;静态&#xff09; 4.系统整体的性能指标&#xff08;动态&#xff09; 三.进制计算 1.任意进制 > 十进制 2.二进制 <> 八、十六进制…