QT系列(三)--QT中的Hello World


前言

如何在QT中进行hello world字符串的显示?


`

一、图形化的方式

图形化方式界面上创建出一个控件QLable,显示hello world

  • 双击打开widget.ui,跳转到设计页面

  • 左侧Display Widgets的控件,添加Label,双击修改相关内容
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 通过控件形成了label,上图显示了当前界面有哪些控件,

  • 刚才的拖拽后,ui文件的xml中就会多出来一段代码,qmake也会在编译中基于这个内容生成一段代码,再通过代码构建这个界面。

这时通过右键左侧empty,pro,在Exprorer中显示 ,就会打开一个文件夹,上一级的build目录,其中的ui_widget.h中就可以在代码中看到我们创建的label.

lass Ui_Widget
{
public:
    QLabel *label;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName(QString::fromUtf8("Widget"));
        Widget->resize(434, 288);
        # 创建标签过程
        label = new QLabel(Widget);
        label->setObjectName(QString::fromUtf8("label"));
        label->setGeometry(QRect(230, 30, 151, 51));

        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

二、代码方式

QT Creater中,通过代码来构造界面的时候,通常把构造界面的代码放入Widget的构造函数中(Widget.cpp)(根据之前创建文件的选择),以下是完整代码

#include <QLabel>//(一定要添加才可以使用)
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QLabel* label = new QLabel(this);//直接添加不可以
    //this指的是给当前label对象指定父对象,this就是当前的构造函数锁定的对象,也就是main函数中的Widget.
    //QLabel label
    label ->setText(“hello world");
}

新建label对象

QLabel* label = new QLabel(this);//直接添加不可以

直接添加label类会显示找不到头文件,因为每一个类都有对应的同名头文件.

之前QT用的头文件是 <qlabel.h>,现在通常使用<QLabel ,该风格代替了原有的。

添加头文件后就可以正常使用label了

Label标签是一个显示内容的字符串控件,起到说明效果,目的是完成文字的显示,在堆上和栈上创建都可以,推荐以上在堆创建的方式。

设置文本

C++没有形成标准库的时候,表示字符串就有很多种方式,字符串c风格(\0)和C++风格(string),这两种都不好用,因此QT中增加了轮子,一系列基础类支持开发,比如QString,链表QList,字典QMap,很多年以后形成了标准,已经引入的容器类也不会删除,只能和标准库容器类共存,用哪一个都可以,原生Api中用的是QT自己这一套。

后续的代码中,看到的更多是QString,而不是std::string,两者之间可以很方便的互相转换,QString很好用,已经对字符编码做了处理

label ->setText(“hello world");

在QString中,也提供了c风格字符串作为参数的构造函数,上述代码中也会隐式构造成QString对象

QSTring对应的头文件,已经被很多Qt内置的其他类间接包含了,因此一般不需要显式包含QString

显示结果

如下图所示,用代码方式,默认显示在了左上角
在这里插入图片描述
如果想放到其他位置也可以。


三、内存泄漏问题的讨论

上述代码中,new了之后没有delete

内存泄漏是一个非常严重的问题, 文件描述符泄漏都很严重,不容易第一时间发现,但是资源泄露的很多,就崩了。真正生产中会只上线一台机器,"灰度上线"避免很大的影响。

但是上述代码不会发生内存泄漏,label对象会在合适的时候析构释放,因为我们将它挂在了对象树上了,具体对象树的介绍放在下一篇文章中讲解。

总结

以上是用代码方式和图形化界面的方式在widget上显示helloworld。

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值