【Qt】Qt Hello World 程序

文章目录

  • 1、Qt Hello World 程序
      • 1.1 使用按钮实现
        • 1.1.1 使用可视化方式实现
      • 1.1.2 纯代码方式实现
    • label创建堆(内存泄漏)或者栈问题
    • Qt基础类(Qstring、Qvector、Qlist)
    • 乱码问题
    • 零散知识

1、Qt Hello World 程序

1.1 使用按钮实现

1.1.1 使用可视化方式实现

双击点开widget.ui
在这里插入图片描述

将Label拖拽到面板上,之后就出现了文本框,就可以将要写的内容写进文本框
在这里插入图片描述

在这里插入图片描述

1.1.2 纯代码方式实现

通常将构造界面的代码放到构造函数当中Widget/MianWindow的构造函数当中。

#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
    //QLabel Label;
    label->setText("hello world");//这里使用Qstring("")也是可以的,上面是进行了隐式转换
    //显示文本
}
Widget::~Widget()
{
    delete ui;
}

label创建堆(内存泄漏)或者栈问题

上面代码当中创建在堆上,但是为什么没有释放空间,而不会造成内存泄漏,原因是label对象会在合适的时候进行析构释放,虽然没有手动释放但是的确是释放了。
当中涉及到了对象树(DOM),本质上就是一个树形结构(N叉树),通过树形结构把界面上的各种元素组织起来。
使用对象树,把内容组织起来,最主要的目的就是为了在合适的时机(窗口关闭时)把这些对象统一进行进行释放。
所以此处使用堆来创建对象也是有原因的,就是为了把对象的生命周期交给Qt的对象树统一处理。
如果要是换成在栈上创建就可能存在"提前释放"的问题。

在这里插入图片描述
从上面的图片可以看出他的窗口上并没有显示字符串,原因是在它随着构造函数的结束就进行了销毁。

this: QLabel* label=new QLabel(this);指向当前类的对象。在这种情况下,new QLabel(this) 表示创建一个新的 QLabel 对象,并将当前对象作为父对象传递给 QLabel 构造函数。这样做的目的是将 QLabel 设置为当前对象的子对象,从而使 QLabel 跟随当前对象的生命周期。当当前对象被销毁时,与之相关联的 QLabel 也会被销毁,从而方便进行内存管理。

在这里要证明一下,析构函数是能帮我们自动销毁的,

//mylabel.hpp
#ifndef MYLABEL_H
#define MYLABEL_H

#include <QWidget>
#include<QLabel>

class Mylabel : public QLabel
{
    Q_OBJECT
public:
    //加上QWidget* parent,才能确保自己的对象加在了对象树上
    Mylabel(QWidget* parent);
    ~Mylabel();
};

#endif // MYLABEL_H

//mylabel.cpp
#include "mylabel.h"
#include<iostream>
#include<QDebug>
Mylabel::Mylabel(QWidget* parent):QLabel(parent)
{

}

Mylabel::~Mylabel()
{
    qDebug()<<"MyLabel 被销毁";
}

//widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "mylabel.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    Mylabel* label=new Mylabel(this);
    label->setText("hello world");
}

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

Qt基础类(Qstring、Qvector、Qlist)

Qt有他自己的一套轮子,但是也可以使用c++当中的类,更建议使用它自己造的轮子,Qstring对于字符编码进行了处理,而std::string就是什么都没干。

乱码问题

在Qt当中使用中文会出现乱码的问题

在这里插入图片描述

先简单的了解一下标识汉字的字符集,常用的就两个
GBK(中国大陆)使用两个字节表示一个汉字,windows简体中文版就是GBK字符集
UFT-8/uft8 变长编码,表示一个符号,使用的字节数有变化2-4,在uft8当中,一个汉字一般是三个字节。Linux当中默认的就是uft8

出现乱码的问题就是编码方式不匹配

所以Qt当中有Qstring,可以帮助我们自动的处理编码模式。
Qt当中还提供了一个工具就是qDebug,可以很好的帮助我们打印日志,更好的处理字符编码
qDebug()当中封装了QDebug这个对象,qDebug()他是一个宏,就可以把它当作cout使用,并且他还是自动换行。打印日志是可以统一关闭的。
在这里插入图片描述

零散知识

在Qt当中可以使用F4进行切换互相对应的头文件和.cpp文件,
在vim当中使用:A进行切换
在Qt当中在声明文件当中使用Alt+Enter会在定义得文件当中自动出现他的框架

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

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

相关文章

【代码随想录】【动态规划】day48:打家劫舍

打家劫舍1 def rob(self, nums):""":type nums: List[int]:rtype: int"""# 分为两个情况&#xff0c;偷还是不偷&#xff0c;# dp[i]为考虑到第i个房间时的最大值if len(nums) 0: # 如果没有房屋&#xff0c;返回0return 0if len(nums) 1: #…

QoS流量整形

流量整形是一种带宽技术形式&#xff0c;它延迟某些类型的网络数据包的流动&#xff0c;以确保更高优先级应用程序的网络性能&#xff0c;它主要涉及调整数据传输速率&#xff0c;以确保网络资源以最佳容量得到利用。流量整形的目的是防止网络拥塞并提高网络的整体性能&#xf…

穿越物联网的迷雾:深入理解MQTT协议

目录标题 1、MQTT简介核心特性 2、MQTT的工作原理通信过程 3、MQTT的消息质量&#xff08;QoS&#xff09;4、安全机制5、实践应用环境准备示例项目发布者客户端订阅者客户端 6、最佳实践7、结论8、参考资料 在物联网&#xff08;IoT&#xff09;的海洋中&#xff0c;数据像水流…

【深度学习】Attention、Self-Attention、Multi-Head Attention

一、Attention 在CV领域&#xff0c;注意力机制通常分为通道注意力和空间注意力或者两者结合。 一张图像经backbone得到的特征通常包括多个通道&#xff0c;每个通道是一个像素矩阵&#xff0c;每个通道对任务的贡献不尽相同&#xff0c;单个通道的特征图中每个像素对任务的贡…

Ansible在macOS上的安装部署

一、安装 Ansible&#xff08;使用 Homebrew&#xff09; 安装 Homebrew&#xff08;如果尚未安装&#xff09;&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"使用 Homebrew 安装 Ansible&#x…

Hive进阶(1)----HDFS写入数据流程(赋图助君理解)

HDFS写入数据流程 1.理论流程描述 HDFS&#xff08;Hadoop分布式文件系统&#xff09;的数据写入流程是一个复杂但高效的过程&#xff0c;可以分为以下8个步骤&#xff1a; 1、client(客户端)发起文件上传请求&#xff1b; 2、通过发送RPC请求与NameNode建立通讯。NameNode…

从100美元到1亿美元,探究传奇交易员GCR的交易心得及其持仓

有史以来最“伟大”的交易员GCR终于回归。2022年&#xff0c;GCR的资金从100美元涨至1亿美元&#xff0c;通过做空LUNA成为有史以来最赚钱的交易员。 GCR又名Giant Cassock Revival&#xff0c;或许是从FTX和Luna崩盘事件中获利最多的人&#xff0c;其净资产达到1亿美元后便“…

lv_micropython for ESP32/S2/S3/C3

由于官方的lv_micropython编译ESP32S3/S2/C3会报错&#xff0c;因为这些芯片的esp-idf底层重写了接口&#xff0c;参照网友提供的方法修改lv_bindings/driver/esp32里的文件&#xff0c;解决编译错误。 问题列举&#xff1a;Issues lvgl/lv_binding_micropython GitHub 一…

视觉信息保真度VIF算法详细介绍

来源 算法核心思想来源该篇论文A VISUAL INFORMATION FIDELITY APPROACH TO VIDEO QUALITY ASSESSMENT;是2005年的一篇高引用文章; 是一种全参考的视频图像评价算法;在奈飞开源的视频质量评价工具vmaf中将其作为一个判断维度,具体关于vmaf介绍可以参考视频质量评价工具vmaf…

安全开发实战(2)---域名反查IP

目录 安全开发专栏 前言 域名与ip的关系 域名反查ip的作用 1.2.1 One 1.2.2 Two 1.2.3 批量监测 ​总结 安全开发专栏 安全开发实战http://t.csdnimg.cn/25N7H 这步是比较关键的一步,一般进行cdn监测后,获取到真实ip地址后,或是域名时,然后进行域名反查IP地址,进行进…

机器学习笔记 - 使用 OpenCV 的结构化森林进行边缘检测

一、简述 边缘检测是计算机视觉领域中一项非常重要的任务。这是许多纯计算机视觉任务(例如轮廓检测)的第一步。即使涉及深度学习,较深层也首先学习识别边缘,然后再学习图像的复杂特征。所以,我们可以说边缘检测在计算机视觉领域非常重要。拥有良好且高效的图像边缘检测算法…

微信小程序实现美食检索功能

1、打开浏览器搜索&#xff1a;腾讯位置服务 2、注册一个账号&#xff0c;有账号的直接登陆就行 3、注册登陆成功后&#xff0c;点击控制台 4、进入控制台后点击我的应用——>创建应用 5、添加key,注意看注释 6、key添加成功后&#xff0c;开始分配额度&#xff08;配额&…

复合机器人在磁钢上下料中的应用及其优势分析

复合机器人是一种集成了移动机器人和工业机器人功能的设备&#xff0c;其独特之处在于拥有“手、脚、眼、脑”的综合能力&#xff0c;从而实现了更高的灵活性和操作效率。在磁钢上下料的应用场景中&#xff0c;复合机器人能够发挥显著的优势。 首先&#xff0c;复合机器人可以根…

【 书生·浦语大模型实战营】作业(五):LMDeploy 量化部署

【 书生浦语大模型实战营】作业&#xff08;五&#xff09;&#xff1a;LMDeploy 量化部署 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系…

vscode绿绿主题setting config

下载插件Green Tree Theme 选greentree ctrl shift p找到setting {"workbench.colorTheme": "Green Tree","editor.fontSize": 16.5, // 字号"workbench.colorCustomizations": {"[Green Tree]": {"activityBarBadge.…

android远程更新下载apk

最近业务有涉及到&#xff0c;奈何是个app代码小白&#xff0c;遂记录一下 一&#xff1a;AndroidManifest.xml文件配置 application标签里面加上 android:networkSecurityConfig"xml/network_config" <!-- app下载更新配置--> <uses-permission andr…

Hugging Face 推出 Idefics2 视觉语言模型

Hugging Face 公司宣布推出 Idefics2&#xff0c;这是一个多功能模型&#xff0c;能够理解和生成基于图像和文本的文字回复。该模型为回答视觉问题、描述视觉内容、根据图像创作故事、文档信息提取&#xff0c;甚至根据视觉输入执行算术运算树立了新的标杆。 Idefics2 仅有 80…

java死锁

一、什么是死锁 锁是个非常有用的工具&#xff0c;运用场景非常多&#xff0c;因为它使用起来非常简单&#xff0c;而且易于理解。但同时它也会带来一些困扰&#xff0c;那就是可能会引起死锁&#xff0c;一旦产生死锁&#xff0c;就会造成系统功能不可用。 比如我们现在有Th…

网络防火墙技术知多少?了解如何保护您的网络安全

在当前以网络为核心的世界中&#xff0c;网络安全成为了至关重要的议题。网络防火墙是一种常见的保护网络安全的技术&#xff0c;用于监控和控制网络流量&#xff0c;阻止未经授权的访问和恶意活动。今天德迅云安全就带您了解下防火墙的一些相关功能和类型。 防火墙的五个功能…

使用clickhouse-backup迁移数据

作者&#xff1a;俊达 1 说明 上一篇文章中&#xff0c;我们介绍了clickhouse-backup工具。除了备份恢复&#xff0c;我们也可以使用该工具来迁移数据。 这篇文章中&#xff0c;我们提供一个使用clickhouse-backup做集群迁移的方案。 2 前置条件 1、源端和目标端网络联通&a…