【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会在定义得文件当中自动出现他的框架

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【任务调度】Apache DolphinScheduler快速入门

Apache DolphinScheduler基本概念 概念&#xff1a;分布式、去中心化、易扩展的可视化DAG工作流任务调度系统。 作用&#xff1a;解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。Apache DolphinScheduler是一款开源的调度工具&#xff…

android远程更新下载apk

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

HBuilder真机调试检测不到荣耀Magic UI系列(包括手机和电脑)解决办法

HBuilder真机调试检测不到荣耀Magic UI系列&#xff08;包括手机和电脑&#xff09;解决办法解决方法&#xff1a; 1.在开发人员选项中开启USB调试 如何进入开发者选项&#xff1f; 设置->关于->版本号&#xff0c;点击版本号直至出现您已处于开发者模式 2.选择USB配置…

Swift-19-基础入门

从本章开始大概用10篇左右文章介绍下Swift语言的基本用法。 简介 Objective-C作为一门比较老的语言&#xff0c; 缺少很多现代语言所具备的高级特性。Swift是目标是比C&#xff0c;C, ObjC更安全可靠&#xff0c;从而减少开发者对在应用运行时出错的代码进行调试的时间成本。本…

ARouter之kotlin build.gradle.kts

ARouter之kotlin build.gradle.kts kotlin的配置需要用到kapt 项目的build.gradle.kts plugins {id("com.android.application") version "8.1.2" apply falseid("org.jetbrains.kotlin.android") version "1.9.0" apply falseid(&…

ElasticSearch实战之项目搜索高亮

文章目录 1. 前情配置2、数据操作2.1 操作API2.2 数据入库 3. 高亮搜索3.1 方法封装3.2 高亮搜索 1. 前情配置 为满足ElasticSearch可在项目中实现搜索高亮&#xff0c;我们需要先做一些前情配置 导入ElasticSearch依赖 <dependency><groupId>org.springframewor…

解析数据科学,探索ChatGPT背后的奥秘

在当今这个由数据驱动和AI蓬勃发展的时代&#xff0c;数据科学作为一门融合多种学科的综合性领域&#xff0c;对于推动各行各业实现数字化转型升级起着至关重要的作用。近年来&#xff0c;大语言模型技术发展态势强劲&#xff0c;为数据科学的进步做出了巨大贡献。其中&#xf…

基于ChatGPT打造安全脚本工具流程

前言 以前想要打造一款自己的工具&#xff0c;想法挺好实际上是难以实现&#xff0c;第一不懂代码的构造&#xff0c;只有一些工具脚本构造思路&#xff0c;第二总是像重复造轮子这种繁琐枯燥工作&#xff0c;抄抄改改搞不清楚逻辑&#xff0c;想打造一款符合自己工作的自定义的…

centos修改启动项加载不同内核

一.背景&#xff1a; 虚拟机中有时需要编译好几个内核版本&#xff0c;make install后系统存在几个内核版本。需要再哪个内核上开发调试就启动特定的内核版本。这就需要修改启动时的内核版本&#xff0c;再物理机或虚拟机启动时可以上下键选择。但有时是docket云环境中或远程时…

【Spring】Spring MVC入门

Spring MVC入门 一、什么是Spring Web MVC&#xff1f; 1.1 MVC定义 MVC是Model View Controller的缩写&#xff0c;是一种软件架构的设计模式&#xff0c;将软件系统分为模型、视图、控制器三个部分。 示意图如下: 可以看到&#xff0c;Controller作为一个“粘合剂”处于M…

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

HDFS写入数据流程 一、写入流程 1、 Client向NameNode发起RPC请求&#xff0c;来确定请求文件block所在的位置&#xff1b; 2、 NameNode会视情况返回文件的部分或者全部block列表&#xff0c;对于每个block&#xff0c;NameNode都会返回含有该block副本的DataNode地址&…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…