【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

        "Hello,World!" 中文意思是“你好,世界”。

        因为 The C Programming Language 中使用它做为第一个演示程序,后来很多程序员在学习编程或进行设备调试时延续了这一习惯。

        下面,我们也将演示利用Label显示Qt中的"Hello World!"

        我们先创建一个文件。

        【不知道如何创建的朋友请移步【Qt秘籍】[005]-Qt的首次邂逅-创建】

        在Qt框架中,QLabel是一个用于显示文本或图标的非交互式控件。它是用户界面设计中非常基础且常用的元素,主要用于展示静态信息,如提示、标题、状态消息或图标等。以下是有关QLabel的一些关键特性和使用方法:

Label基本用途

  • 显示文本:可以用来显示简单的文本信息,支持富文本格式,允许设置字体、颜色和对齐方式等。
  • 显示图片:能够加载并显示图像文件,支持多种图像格式。
  • 作为图标使用:常用于工具栏按钮、窗口图标等位置,展示小图标。
  • 辅助其他控件:作为表单控件或其它UI元素旁边的描述性文本,增加可访问性。

Label常用功能与方法

  • 设置文本setText(const QString &text) 方法用于设置要显示的文本内容。
  • 加载图片:使用 setPixmap(const QPixmap &pixmap) 或 setScaledContents(bool) 方法来加载并显示图片,以及控制图片是否缩放以适应标签大小。
  • 富文本支持:通过 setTextFormat(Qt::TextFormat format) 和直接在文本中使用HTML标签,可以实现文本的格式化。
  • 对齐方式:使用 setAlignment(Qt::Alignment alignment) 方法设定文本或图片的对齐方式。
  • 交互性:虽然默认是非交互式的,但可以通过设置 QLabel 的属性使其成为可点击的,并连接槽函数以响应点击事件。

创建方式

1.图形化方式

2.纯代码方式

图形化方式 

1.打开widget.ui

2.找到Label控件后推拽到右边屏幕上

3.拖动放大,让后修改名字

我们发现,在右上角已经显示出其控件

4.保存后直接运行

         我们发现,不同于我们以前写过的代码,这种方式是自动完成的。Qt Designer提供了拖放式的界面构建方式,让我们可以直观地从组件面板中选择按钮、标签、文本框等各种UI元素,并放置到窗体上。我们可以直接调整这些元素的大小、位置以及样式,从而无需编写布局代码就能创建复杂的用户界面布局。

纯代码方式

同样地,我们也可以直接用纯代码方式创建文件。

请先点击关闭所有项目和编辑器 ,以免造成两次代码混淆。

1.打开widget.cpp

2.添加几行代码

QLabel* label = new QLabel(this);   //使用this的原因: 给当前label指定一个“父对象”
label->setText("hello world!");     //代码创建后默认显示在左上角

3.添加头文件

#include <QLabel>

widget.cpp 所有代码展示 

//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    QLabel* label = new QLabel(this);   //使用this的原因: 给当前label指定一个“父对象”
    label->setText("hello world!");     //代码创建后默认显示在左上角
}

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

4.保存后运行

我们发现,"hello world!"确实显示在了左上角。

问题1:内存泄漏

为何new对象后没有delete呢?难道不会造成内存泄漏吗?

回答1:内存泄漏

        在Qt中,是否需要手动调用delete来释放由new创建的对象,取决于该对象是否被Qt的对象树管理系统所管理。

        当在Qt中创建一个对象并为其指定了父对象时(通常是在构造函数中传入父对象的指针作为参数),该对象会自动加入到其父对象的子对象列表中。在这种情况下,当父对象被销毁时(例如,父对象是一个窗口部件并且窗口关闭),Qt的事件处理机制会自动遍历并销毁所有子对象,从而释放它们占用的内存。因此,在这种场景下,你不需要手动调用delete,Qt框架会帮你管理这部分内存,避免内存泄漏。

        然而,如果你使用new创建了一个对象但没有指定父对象,或者该对象没有以任何方式连接到Qt的对象树上,那么你就有责任显式地调用delete来释放该对象占用的内存。如果不这样做,确实会导致内存泄漏,即该块内存将无法被再次使用,直到程序结束。

总的来说,为了避免内存泄漏:

  • 对于加入到Qt对象树中的对象(有父对象的),通常不需要手动delete
  • 对于没有父对象或者未加入对象树的动态分配对象,需要确保适时地手动调用delete

        在实践中,尽量利用Qt的对象树机制来管理内存,减少手动内存管理的需求,这样可以降低内存泄漏的风险。同时,现代C++实践鼓励使用智能指针(如std::unique_ptr, std::shared_ptr)来自动管理内存,即使在非Qt环境中也是如此。

对象树

【Qt知识】Qt中的对象树是什么?-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习笔记:0.cuda安装,成功

B站上说&#xff1a;cs上骗子太多。文章太久&#xff0c;我深以为然。用了一天。才装好。其实很简单。 CUDA安装教程&#xff08;超详细&#xff09;-CSDN博客文章浏览阅读1w次&#xff0c;点赞5次&#xff0c;收藏56次。windows10 版本安装 CUDA &#xff0c;首先需要下载两个…

秋招突击——第四弹——Java的SSN框架快速入门——Spring(2)

文章目录 前言其他Spring加载properties 容器创建容器获取beanBeanFactory容器总结 注解注解开发对定义bean纯注解开发Bean管理Bean作用范围Bean生命周期 注解开发依赖注入第三方bean管理第三方bean管理第三方bean注入 注解开发总结 Spring整合整合mybatis整合Junit AOPAOP核心…

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

外观数列 ---- 模拟

题目链接 题目: 分析: 题目的意思如下:所以我们需要引用双指针来找到连续的字符有几个, 并添加到答案中, 接着将此字符添加到答案中, 让left right , 继续向后遍历整个字符串, 重复上面的操作将答案重新赋给字符串, 继续重复上述操作, 应该重复n - 1 次, 因为n为1的时候, 直…

上网是不是必须路由器和光猫之一负责拨号?

链接&#xff1a;https://www.zhihu.com/question/624856022/answer/3245182557 上网并非一定要“拨号”&#xff0c;使用固定IP地址可以直接上网&#xff0c;不需要拨号。你们公司的宽带属于商用宽带&#xff0c;运营商&#xff08;电信&#xff09;给配置了固定的IP&#…

如何监控企业微信聊天记录内容,第二个方法太赞了!

监控企业微信聊天记录内容是企业为了确保沟通合规、提升工作效率、防止信息泄露以及保护公司利益而采取的一种管理措施。在当前的中国&#xff0c;是法律允许的合法行为。 怎么监控&#xff1f;请看下面详情。 1. 利用企业微信自带功能 企业会话存档&#xff1a; 企业微信提…

43页 | 2024年企业级BI平台白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024年企业级BI平台白皮书 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 诚挚邀请您微信扫码加入以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&#xff01;&#xff01;&…

【Python Cookbook】S01E16 同时对数据做转换和换算

目录 问题解决方案讨论 问题 当换算&#xff08;sum(), min(), max()&#xff09;同时遇到转换或筛选&#xff0c;怎么做&#xff1f; 解决方案 有一种非常优雅的方法&#xff0c;可以将数据换算和转换结合在一起——在函数参数中使用 生成器表达式。 一个直观的案例&#…

YOLOv8+PyQt5海洋船只检测(可以重新训练,yolov8模型,从图像、视频和摄像头三种路径识别检测)

1.效果视频&#xff1a;海洋船只检测yoloV8检测&#xff08;https://mbd.pub/o/bread/mbd-ZpaYk55r&#xff09;_哔哩哔哩_bilibili资源包含可视化的海洋船只检测系统&#xff0c;可对于高空拍摄到的海洋图片进行轮船检测&#xff0c;基于最新的YOLOv8训练的海洋船只检测模型&a…

Facebook开户|FB10大提升视频广告效果实践

Facebook10大提升视频广告效果实践&#xff01;&#xff01;需要的家人们建议点赞收藏哦~ 一、在前3秒吸引注意力 在视频广告推广活动中&#xff0c;一直都有黄金3秒的说法&#xff0c;指的就是通过前三秒的制作&#xff0c;吸引观众的注意。吸引人的画面、个性的CTA、独特性和…

C语言| 字母金字塔

【思路分析&#xff1a;】 1 考虑左边的空格大写字母&#xff0c;而大写字母 先升序后降序输出 2 升序输出的字母的个数行数最大字母在26个英文字母中排的位置序号 3 降序输出的字母 升序输出的字母个数-1 编程顺序&#xff1a; 1 定义循环变量i,表示字母的顺序,循环变量j 表…

软件测试之黑盒测试与白盒测试知识小结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 对于很多刚开始学习软件测试的小伙伴来说&#xff0c;如果能尽早将黑盒、白盒测试弄明白&#xf…

Makefile的入门学习

一、Makefile的入门学习 编译工具及构建工具介绍 在之前的课程&#xff0c;都是直接使用gcc对代码进行编译&#xff0c;这对简单的工程是可以的&#xff0c;但当我们遇到复杂的工程时&#xff0c;每次用gcc等编译工具去操作就会显得很低效。因此make工具就出现了&#xff0c;…

MYSQL之主从复制

一&#xff0c;安装MYSQL&#xff0c;两台 二&#xff0c;配置master服务器 vim /etc/my.cnf 在mysqld模块下加入 server-id133 #配置server-id&#xff0c;让主服务器有唯一ID号&#xff08;让从服务器知道 他的主服务器是谁&#xff09;,建议使用ip最后3位 log-binmysql-bi…

coze扣子自定义插件开发

之前用过阿里云的&#xff0c;阿里云的插件填写的内容有点复杂 今天体验coze&#xff0c;没想到如此简单&#xff1b; 访问地址&#xff1a;扣子&#xff0c;注册对应账户&#xff0c;并创建对应空间&#xff1b; 第一步&#xff1a;点击插件&#xff0c;新建插件 选择不需要…

OpenHarmony嵌套类对象属性变化:@Observed装饰器和@ObjectLink装饰器

上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二…

代码随想录算法训练营第四十八天 | 70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

70. 爬楼梯 &#xff08;进阶&#xff09; 代码随想录 解题思路 1.确定dp数组以及下标的含义 dp[i]&#xff1a;爬到有i个台阶的楼顶&#xff0c;有dp[i]种方法 2.递推公式 dp[j] dp[j - nums[i] ] 装满背包有多少种方法一般用这个 3.遍历顺序 完全背包&#xff0c;且…

Java面试——中间件

OpenFeign 1、openFeign是一个HTTP客户端&#xff0c;它融合了springmvc的注解&#xff0c;使之可以用REST风格的映射来请求转发。 2、可以把openFegin理解为是controller层或是service层。可以取代springmvc控制层作为请求映射&#xff0c;亦或是作为service层处理逻辑&#…

《网络安全技术 生成式人工智能服务安全基本要求》征求意见稿

1. 训练数据安全要求 &#xff08;1&#xff09;数据来源安全&#xff1a; 采集来源管理&#xff1a; 采集数据前应进行安全评估&#xff0c;含违法不良信息超过5%的数据源不得使用。 采集后需核验&#xff0c;含违法不良信息超过5%的数据不得用于训练。 不同来源训练数据搭…

kafka-集群-主题创建

文章目录 1、集群主题创建1.1、查看 efak1.2、创建 主题 my_topic1 并建立6个分区并给每个分区建立3个副本1.2.1、查看 my_topic1 的详细信息 1.3、停止 kafka-01实例&#xff0c;端口号为 9095 1、集群主题创建 1.1、查看 efak 已经有三个kafka实例 1.2、创建 主题 my_topic1…