Qt的学习(二)

news2025/6/10 12:34:09

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.coloradmin.cn/o/2406623.html

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

相关文章

工厂方法模式和抽象工厂方法模式的battle

1.案例直接上手 在这个案例里面&#xff0c;我们会实现这个普通的工厂方法&#xff0c;并且对比这个普通工厂方法和我们直接创建对象的差别在哪里&#xff0c;为什么需要一个工厂&#xff1a; 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类&#xff1a; 两个发…

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​&#xff1a;这篇文章要解决的问题是当前大型语言模型&#xff08;LLMs&#xff09;在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色&#xff0c;但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成&#xff08;RA…

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…

C++11 constexpr和字面类型:从入门到精通

文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用

摘要 神经影像技术对医学科学产生了深远的影响&#xff0c;推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下&#xff0c;基于神经血管耦合现象的多模态神经影像方法&#xff0c;通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里&#xff0c;本研…

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)

漏洞概述 漏洞名称&#xff1a;Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号&#xff1a;CVE-2023-25194 CVSS评分&#xff1a;8.8 影响版本&#xff1a;Apache Kafka 2.3.0 - 3.3.2 修复版本&#xff1a;≥ 3.4.0 漏洞类型&#xff1a;反序列化导致的远程代…

Copilot for Xcode (iOS的 AI辅助编程)

Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot&#xff0c;它能根据上下文补全代码&#xff0c;快速生成常用…

Axure零基础跟我学:展开与收回

亲爱的小伙伴,如有帮助请订阅专栏!跟着老师每课一练,系统学习Axure交互设计课程! Axure产品经理精品视频课https://edu.csdn.net/course/detail/40420 课程主题:Axure菜单展开与收回 课程视频:

RabbitMQ 各类交换机

为什么要用交换机&#xff1f; 交换机用来路由消息。如果直发队列&#xff0c;这个消息就被处理消失了&#xff0c;那别的队列也需要这个消息怎么办&#xff1f;那就要用到交换机 交换机类型 1&#xff0c;fanout&#xff1a;广播 特点 广播所有消息​​&#xff1a;将消息…

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…

未授权访问事件频发,我们应当如何应对?

在当下&#xff0c;数据已成为企业和组织的核心资产&#xff0c;是推动业务发展、决策制定以及创新的关键驱动力。然而&#xff0c;未授权访问这一隐匿的安全威胁&#xff0c;正如同高悬的达摩克利斯之剑&#xff0c;时刻威胁着数据的安全&#xff0c;一旦触发&#xff0c;便可…

欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!

多连接 BLE 怎么设计服务不会乱&#xff1f;分层思维来救场&#xff01; 作者按&#xff1a; 你是不是也遇到过 BLE 多连接时&#xff0c;调试现场像网吧“掉线风暴”&#xff1f; 温度传感器连上了&#xff0c;心率带丢了&#xff1b;一边 OTA 更新&#xff0c;一边通知卡壳。…