"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博客