Qt 创建控件的两种方式

embedded/2024/12/22 0:45:53/

目录

Qt 创建控件的两种方式

通过ui界面创建控件

通过代码方式创建控件


Qt 创建控件的两种方式

通过ui界面创建控件

这里当然我们是需要先有一个项目的,按照我们之前创建项目的步骤,我们可以先创建一个 Widget 的项目,但是 MainWindow 也是可以的,不过 MainWindow 是编写一整个界面的时候使用的,目前我们是不需要使用到的,所以我们可以先使用 Widge 的项目。

我们之间进入到 ui 界面,前面我们也说了在 ui 界面的左边的那一列,就是我们常用的控件,所以我们就可以直接将控件使用鼠标托拽的方式拖拽到 ui 界面上。

我们在 display 模块里面及那个 Label 拖拽到 ui 界面上,拖拽上去后,我们也可以使用鼠标移动这个控件的位置,同时也可以修改它的大小等参数,在这个 ui 界面的右侧,还是一个关于 ui 界面上的控件的属性,也可以通过直接点击对应的控件,然后修改其属性,这个详细的我们后面介绍,当前我们是认识到创建控件的两种方式。

当我们将 Label 拖到 ui 界面上之后,因为 Label 翻译过来就是一个标签,我们也可以修改其中的内容,然后我们将里面的内容修改为 Hello World 然后我们点击运行即可,运行就在最左边的一个绿色的开始按钮,也可以使用快捷键 Ctrl+r。

通过代码方式创建控件

既然上面我们通过 ui 界面创建 Hello World 的方法已经学会了,那么下面我们学习一下如何通过代码的方式创建这个,如果使用代码创建的话,那么就是不需要使用到 ui 界面的,所以我们就需要直接在代码里面编写对应的代码。

那么我们具体应该在哪个文件里面写呢?起始我们只需要在 Widget 的构造函数里面写即可,当 Widget 对象创建好后,也就有了相应的控件,然后当我们在代码里面写好创建对应的控件之后,我们也可以使用代码来修改控件里面的文字,当然也可以通过代码来修改 Label 中的文本信息了。

#include "QLabel"
​
​
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 1. 创建一个 LabelQLabel* label = new QLabel(this);// 2. 修改 label 中的文本label->setText("Hello World");
}

我们先看一下我们编写好的代码,然后我们实际运行一下,我们在做解释。

我们看到确实有 Hello World ,那么我们下面解释一下代码: 创建 label 对象的时候,我们使用了 QLabel 这个类,而这个类是 Qt 中自带的,所以我们可以使用,但是我们是需要包这个类的头文件的,我们前面也说了,Qt 中的头文件和你使用的这个类的类名是一样的,所以我们只需要包含 QLabel 这个类即可。 我们在创建这个类的时候,使用的是 new 也就是在堆上创建,那么为什么不在栈上创建呢?实际上在栈上创建是显示不出来的,为什么呢?因为栈上创建的话,当构造函数结束之后,这个对象就析构了,所以当到了显示的时候,这个对象没有,那么也就当然显示不出来了,所以我们还是推荐在堆上创建对象。 在创建的时候,我们后面还给了一个参数,那么这个参数是什么意思呢?前面我们也说过,Qt 是一个半自动化释放对象的语言,并不像 java 一样是全自动化的,那么当我们创建一个对象的时候,我们就需要将这个对象加入到对象树上,这样这个对象就不需要我们最后关心释放的问题了。 我们没有对 new 出来的这个 label 进行释放没问题吗?我们在创建对象的时候,我们给了一个参数 this 指针,这个就是可以将该对象加到对象树上,加入到对象树之后,那么该当不适用该对象的时候,那么就会自动释放,就不需要我们来关心释放的问题了。

上面就是我们提到了两种创建控件的方式,并且我们还提到了对象树,那么我们后面在详细介绍对象树。


http://www.ppmy.cn/embedded/6471.html

相关文章

开源博客项目Blog .NET Core源码学习(16:App.Hosting项目结构分析-4)

本文学习并分析App.Hosting项目中前台页面的文章专栏页面和文章详情页面。< 文章专栏页面 文章专栏页面总体上为左右布局&#xff0c;左侧显示文章列表&#xff0c;右侧从上向下为关键词搜索、分类导航、热门文章等内容。整个页面使用了layui中的面包屑导航、表单、模版、流…

MATLAB环境下基于随机期望最大化的多分量信号瞬时频率估计方法

相对于频率成分单一、周期性强的平稳信号来说&#xff0c;具有非平稳、非周期、非可积特性的非平稳信号更普遍地存在于自然界中。调频信号作为非平稳信号的一种&#xff0c;由于其频率时变、距离分辨率高、截获率低等特性&#xff0c;被广泛应用于雷达、地震勘测等领域。调频信…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(1)——场景故事介绍

生成NPC为交互应用程序创建逼真的人类行为模拟。在这项工作中&#xff0c;我们通过将二十五个NPC放置在一个沙盒环境中&#xff08;类似于The Sims&#xff0c;模拟人生&#xff09;&#xff0c;展示了生成NPC的能力。用户可以观察和干预NPC的日常计划、分享新闻、建立关系以及…

C语言中的控制语句(循环语句while、for)

循环语句 什么是循环 重复执行代码 为什么需要循环循环的实现方式 whiledo...whilefor while语句 语法格式&#xff1a; while (条件) {循环体…… } 需求&#xff1a;跑步5圈 示例代码&#xff1a; #include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的…

VBA 实现outlook 当邮件设置category: red 即触发自动创建jira issue

1. 打开: Outlook VBA&#xff08;Visual Basic for Applications&#xff09; 方法一: 在邮件直接搜索:Visual Basic editor 方法二: File -> Options -> Customize Ribbon-> 打钩 如下图: 2.设置运行VBA 脚本: File -> Options -> Trust center -> Trus…

FineBI 6.0 Linux 部署、ClickHouse 源配置

文章目录 FineBI 概述FineBI 部署安装环境说明1.下载安装包2.安装3.初始化设置4.登录5.快速入门 启动与关闭启动关闭 ClickHouse 源配置开启驱动上传功能驱动上传数据库连接配置基础表属性设置数据导入 FineBI 概述 FineBI 是一款国产的商业智能&#xff08;BI&#xff09;软件…

gazebo中vins-fusion在仿真小车上的部署

软件要求&#xff1a;Ubuntu 20.04 ros的noetic版本&#xff0c;我是在虚拟机vitrualbox上运行的 这几天在学ROS&#xff0c;跟着赵虚左老师过了一遍之后&#xff0c;感觉还是有很多不懂的地方&#xff0c;xtdrone上仿真跟着文档走了一遍&#xff0c;好像没学到什么东西&#…

微服务架构中的数据一致性设计及技术实现

目录 1.概要设计 1.1数据一致性模型 1.1.1 强一致性 1.1.2 最终一致性 1.2 技术实现策略 1.2.1 使用分布式事务 1.2.2 基于事件的最终一致性&#xff08;Event-Driven Architecture, EDA&#xff09; 1.2.3 使用数据库的特性 1.2.4 业务层面的策略 1.2.5 分布式锁和版…