Qt的学习(二)

1. 创建Hello Word

        两种方式,实现helloworld:

        1.通过图形化的方式,在界面上创建出一个控件,显示helloworld

        2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world;

1.1 图形化的方式

运行结果如下: 

1.2 纯代码的方式

        label“标签:界面上一个用来显示内容的字符串控件。 

widget源文件如下:

#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);//创建对象的时候可以在堆上创建,也可以在栈上创建,但是Qt中一般推荐在堆上创建对象//this,是指给当前的label对象,指定一个父对象this,this是指调用该构造函数的对象//即 main函数中的widget w这个对象//此处new的方式创建对象,主要是将这个对象的生命周期交给Qt的对象数来统一管理。//如果在栈上创建该控件对象,可能会存在提前释放的问题。label->setText("Hello World");//设置控件中,要显示的文本//QString会隐式显式
}Widget::~Widget()
{delete ui;
}

1.3 内存泄露问题

        上述代码,在Qt中不会产生内存泄露,label对象会合适的时候被析构释放(虽然没有手动写delete,确实能释放)之所以能够把对象释放掉,主要是因为把这个对象是挂到了对象树上。Qt中搞了一个对象树,也是N义树,把界面上的各种元素组织起来了。

        通过这个树形结构,就把界面上要现实的这些控件对象都组织起来。组织的目的就是能够在合适的时候(窗口关闭/销毁),把这些对象统一进行释放。

如何查看文件的编码格式:

.cpp文件,点击右键,一explore方式打开进入资源管理器,将其文件以记事本的方式打开,点击另存为,查看文本框的编码格式。如果现实utf-8,说明这个文件就是utf-8编码;如果显示的是ansi,说明这个文件就是GBK编码。

Qt Creater内置的终端不一定是使用utf8的方式现实字符串。

         后续再Qt中,如果想通过打印日志的方式输出一些调试信息,都优先使用qDebug。虽然使用cout也行,但是cout对于编码的处理不太好,在windows上容易出现乱码(如果是Linux使用QtCreator,一般就没事,Linux默认的编码一般都是utf8)。
        使用qDebug,还有一个好处就是打印的调试日志,是可以统一进行关闭的。qDebug可以通过编译开关,来实现一键式关闭。

1.4 使用编辑框完成hw

编辑框分为单行编辑框(QLineEdit)和多行编辑框(QTextEdit);

form文件中图形化操作

纯代码操作:

#include "widget.h"
#include "ui_widget.h"
#include <QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* edit = new QLineEdit(this);edit->setText("hello shangjialu");}Widget::~Widget()
{delete ui;
}

 1.5 使用按钮创建hw

        push button普通按钮

        Qt中的信号槽机制:本质就是给按钮的点击操作,关联上一个处理函数。当用户点击的时候,就会执行这个处理函数。

图形化界面操作 

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{//当按钮被点击之后,就把按钮中的文本进行切换if (ui->pushButton->text() == QString("hello shangjialu")){ui->pushButton->setText("hello faka");}else {ui->pushButton->setText("hello shangjialu");}}

纯代码的方式

#include "widget.h"
#include "ui_widget.h"
#include "widget.h"#include <ui_widget.h>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);myButton = new QPushButton(this);myButton->setText("hello shangjialu");connect(myButton,&QPushButton::clicked,this,&Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{if(myButton->text() == "hello shangjialu"){myButton->setText("shang linlu");}else{myButton->setText("hello shangjialu");}
}

 小结:

        对于纯代码版本,按钮对象是咱们自己new的。为了保证其他函数中能够访问到这个变量,就需要把按钮对象设定为Widget类的成员变量。

        对于图形界面版本版本,此时按钮对象,不需要咱们自己new。new对象的操作已经是被Qt自动生成了。而且这个按钮对象,已经作为ui对象里的一个成员变量,也无需作为Widget的成员。

        实际开发中,是通过代码的方式构造界面为主,还是通过图形化界面的方式构造界面为主。这两种,都很主要,难分主次。

        如果当前程序界面,界面内容是比较固定的,此时就会以图形化的方式来构造界面;但是如果程序界面,经常要动态变化,此时就会以代码的方式来构造界面。 

1.6 QtCreator中的快捷键

  注释:ctrl+/
  运行:ctrl+R
  编译:ctrl+B
  字体缩放:ctrl+鼠标滑轮
  查找:ctrl+F
  整行移动:ctrl+shift+个/
  帮助文档:F1
  自动对齐:ctrl+i
  同名之间的.h和.cpp的切换:F4生成函数声明的对应定义:alt+enter

1.7 Qt窗口坐标体系

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

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

相关文章

Windows11+VS2019配置Libigl-2.4.1

Windows11VS2019配置Libigl-2.4.1 由于课题需要&#xff0c;所以出一篇配置Libigl的博客&#xff0c;制作不易&#xff0c;请多多点赞 一、官网下载 官网&#xff1a;https://libigl.github.io/ GitHub下载地址&#xff1a;https://github.com/libigl/libigl 这里我们选择…

地球科学方向(Geoscience and Remote Sensing),1天见刊,当月可检索!

CSP科学出版社&#xff0c;旨在通过为研究人员提供最佳环境来发表、参考、阅读和引用他们的作品&#xff0c;从而为科学界服务。现已与科检易学术达成出版战略合作&#xff0c;现在联合共同出版高质量学术水平的期刊&#xff0c;为方便广大科研学者投稿方便&#xff0c;现已经建…

基于 Three.js 的 3D 模型快照生成方案

基于 Three.js 的 3D 模型快照生成方案 此方案通过 Three.js 渲染场景并异步生成图像数据&#xff0c;同时支持分辨率缩放和 Blob 格式输出&#xff0c;为模型预览、截图保存等需求提供完整解决方案。 问题分析&#xff1a; 使用html2canvas 生成的快照画布显示为空&#xff…

「Java基本语法」变量的使用

变量定义 变量是程序中存储数据的容器&#xff0c;用于保存可变的数据值。在Java中&#xff0c;变量必须先声明后使用&#xff0c;声明时需指定变量的数据类型和变量名。 语法 数据类型 变量名 [ 初始值]; 示例&#xff1a;声明与初始化 public class VariableDemo {publi…

SpringCloud学习笔记-2

说明&#xff1a;来源于网络&#xff0c;如有侵权请联系我删除 1.提问&#xff1a;如果注册中心宕机&#xff0c;远程调用还能成功吗 答&#xff1a;当微服务发起请求时&#xff0c;会向注册中心请求所有的微服务地址&#xff0c;然后在向指定的微服务地址发起请求。在设计实…

Hac - NBh标准JSON协议使用说明文档

Hac - NBh 标准 JSON 协议使用说明文档 一、协议概述 Hac - NBh 标准 JSON 协议是专为物联网设备与服务器数据交互设计的通信协议。以 JSON 格式为基础,采用键值对(KV 值)组织数据,支持灵活选取数据项,通过 CBOR 格式实现高效传输,并利用 AES 128 加密保障数据安全。 …

k8s从入门到放弃之Service负载均衡

k8s从入门到放弃之Service负载均衡 在 Kubernetes (K8s) 中&#xff0c;Service 是一种抽象&#xff0c;它定义了一组逻辑上的 Pod 和访问它们的策略。Service 的主要目的是提供一种可靠的方式来访问一组具有相同标签&#xff08;Label&#xff09;的 Pod&#xff0c;即使这些…

【题解-洛谷】P10480 可达性统计

题目&#xff1a;P10480 可达性统计 题目描述 给定一张 N N N 个点 M M M 条边的有向无环图&#xff0c;分别统计从每个点出发能够到达的点的数量。 输入格式 第一行两个整数 N , M N,M N,M&#xff0c;接下来 M M M 行每行两个整数 x , y x,y x,y&#xff0c;表示从 …

SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

文章目录 前言一、问题二、原因1.分析2.配置静态路由再试3.定位 总结 前言 本来昨天就应该也记录下&#xff0c;免得忘记的&#xff0c;但是有点晚了&#xff0c;酒没写&#xff0c;真的是被坑惨了。 当然这也是追求最新的代价&#xff0c;也是对新技术、老知识点的重温…

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…

RAG 文档解析难点1:多栏布局的 PDF 如何解析

写在前面 在构建检索增强生成 (Retrieval-Augmented Generation, RAG) 应用时,高质量的数据源是成功的基石。PDF 作为一种广泛使用的文档格式,承载着海量的知识。然而,许多 PDF 文档,特别是学术论文、期刊、杂志和一些报告,都采用了多栏布局 (multi-column layout)。 直…

全面掌握Pandas时间序列处理:从基础到实战

时间序列数据在金融分析、物联网、商业智能等领域无处不在。作为Python数据分析的核心库&#xff0c;Pandas提供了强大而全面的时间序列处理功能。本文将系统介绍Pandas时间序列处理的各个方面&#xff0c;从基础概念到高级应用&#xff0c;帮助您在实际工作中高效处理时间序列…

vscode 离线安装第三方库跳转库

我安装的是C/C的函数跳转 下载的离线库&#xff1a; 项目首页 - vscode代码自动补全跳转插件离线安装包:cpptools-win32.vsix是一款专为VSCode设计的离线安装插件&#xff0c;特别适合无法连接网络的电脑环境。通过安装此插件&#xff0c;您的VSCode将获得强大的代码自动跳转…

GitHub 趋势日报 (2025年06月05日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 1472 onlook 991 HowToCook 752 ChinaTextbook 649 quarkdown 451 scrapy 324 age…

关于如何使用VScode编译下载keil工程的步骤演示

1、vscode的插件市场下载keil Assistant 2 、点设置 3、复制keil的地址 4、粘贴到第…

OD 算法题 B卷【最大岛屿体积】

文章目录 最大岛屿体积 最大岛屿体积 大于0的数表示陆地&#xff0c;0表示水&#xff0c;请计算由陆地、水组成的网格中最大岛屿的体积&#xff1b;陆地的数字之和表示所在岛屿的体积&#xff0c;岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平或者垂直方向上相邻的陆地…

一文读懂 Docker Compose(白话版)

一、Docker Compose 是个啥&#xff1f; 想象你开餐厅&#xff1a; 单容器 一个厨师 &#x1f468;&#x1f373;Docker Compose 整个后厨团队 &#x1f468;&#x1f373;&#x1f469;&#x1f373;&#x1f9d1;&#x1f373; 菜单 工作流程 用个菜单文件&#xff08;…

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…

单例模式与锁(死锁)

目录 线程安全的单例模式 什么是单例模式 单例模式的特点 饿汉实现方式和懒汉实现方式 饿汉⽅式实现单例模式 懒汉⽅式实现单例模式 懒汉⽅式实现单例模式(线程安全版本) 单例式线程池 ThreadPool.hpp threadpool.cc 运行结果 线程安全和重⼊问题 常⻅锁概念 死…

CSS标题下划线动态进入和移开

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>CSS动态效果</title><style>div .title…