QT开发笔记:信号和槽

news2024/9/25 7:22:43

乱码问题:

出现乱码问题原因只有一个:就是编码方式不匹配!!!
中文常见汉字4K,算上各种生僻字差不多六万字
仍然使用一个大表格,给每个汉字,分配一个整数即可。
字符集~~表示汉字的字符集,不同的字符集表示同一个汉字,使用的数字不相同。
目前表示汉字的字符集主要两种:
1、GBK (中国大陆)使用2个字节表示一个汉字,Windows简体中文版,默认GBK
2、UTF - 8/ utf8 变长编码。表示一个符号,使用的字节数有变化,2-4,但是在utf8中,一个汉字,一般是3个字节。
当前表示中文主流的方式还得是utf8(支持各种语言文字)
QT中提供了qDebug() 工具,借助在这里插入图片描述

MyLabel::~MyLabel()
{
    //std::cout << "MyLabel 被销毁!" << std::endl;  //打印出是乱码
    qDebug() << "MyLabel 被销毁!!";
}

这个直接能够处理乱码。
在这里插入图片描述
后续在Qt中,如果想通过打印日志的方式输出一些调试信息,都优先使用 qDebug,
Qdebug可以通过控制开关进行打印控制。

小结:
1、认识QLabel
2、内存泄露/文件资源泄露
3、对象树。QT中通过对象树统一释放对象
4、通过继承QT内置的类,就可以达到对现有控件进行功能扩展效果。
也可以重写控件中的任何功能,不仅仅是析构函数。
5、乱码问题 和 字符集
6、如何在Qt 中打印日志作为调试信息。qDebug(),具体宏搜一下。

Qt中的信号槽机制。
本质就是给按钮的剪辑操作,关联桑一个处理的函数。当用户电机的时候,就会执行这个处理函数。
connect(); linux网络编程中,也学过一个函数,叫做connect.这个函数用来给TCP socket 建立连接的。
写TCP。。。
QT中的connect是QObject这个类提供的静态函数。这个函数的作用就是“链接”信号和槽。

实际开发中,界面和代码构造男分主次!
如果你当前程序界面,界面内容是比较固定的,此时就会以同行画的方式来构造界面。
如果你的程序界面经常要动态变化,次十就会以代码的方式来构造界面。

QT中的命名规范;
/给变量/函数。起名:
1、描述性。
2、较长偏好使用_ 链接进行单词分割:蛇形命名法。
Qt中,偏好使用大写字母来进行单词分割:驼峰命名法。
具体使用哪种:入乡随俗。看公司使用什么风格。

QT坐标系
平面直角坐标系(笛卡尔坐标系):右手坐标系
计算机坐标系:左手坐标系 ,原点:左上角
给QT某个控件设置位置,就需要指定坐标,对这个空间来说,坐标系的原点就是相对父窗口/控件的。

QT信号与槽

  • 信号源:由那个控件发出的信号。
  • 信号的类型:用户进行不同的操作,就可能出发不同的信号。
  • 信号的处理方式:槽 =》函数 Qt中可以使用connect这样的函数,把一个信号和一个槽关联起来。后续只要信号触发了,Qt就会自动执行槽函数。

Linux中
1、信号处理函数。
2、线程的入口函数。
3、

自定义信号和槽

  • 自定义槽函数比较关键,开发中大部分情况是需要进行自定义槽函数的,就是用户出发某个操作后进行的业务逻辑。
  • 自定义信号很少使用。
  • Widget 虽然还没定义任何信号,由于继承自QObject,也提供了一些信号了,可以直接使用。
  • QT5 以及更高版本中,槽函数和普通的成员函数之间没啥区别了。
  • 但是信号则是一类非常特殊的函数。这个函数的定义是QT在编译过程中自动生成的,过程无法干预。
  • 作为信号函数返回值必须是 void.
  • 信号定义关键字 : signals
    emit Signel();
    emit 发射 不仅可以发射自定义信号,QT内部信号也可以发射。

信号和槽 也可以带参数。
当信号带有参数的时候,槽的参数必须和信号的参数一致(类型和个数一致)。信号给槽的参数不能少!!!可以多。
所谓的信号槽,终究要解决的问题,就是响应用户的操作。信号槽其实在GUI开发的各种框架中,设计一个比较特色的存在。
其他的GUI来发框架搞得方式都更简单些,网页开发中相应用户操作主要是挂回调函数。
不需要搞一个单独的信号槽链接,处理函数就像控件的一个属性/成员一样(大部分GUI框架都是这样搞)。

Qt信号槽 connect机制设想:
1)解耦合。
2)多对多效果。一个信号可以connect到多个槽函数,一个槽函数也可以被多个信号connect。
实际开发中,多对多其实是个伪需求,实际开发中很少用到,绝大部分情况一对一就够用了。

补充:
1、使用 disconnect来断开信号与槽的链接。
2、定义槽函数的时候,也是可以使用lambda表达式。本质就是一个匿名函数,主要应用在

    QPushButton* button = new QPushButton(this);
    button->setText("按钮");
    connect(button,&QPushButton::clicked,this,[](){
         qDebug()<< "lambda 被执行了!!";

    });

}

lambda表达式是一个回调函数,这个函数无法直接获取到上层作用域中的变量的
lambda为了解决上述问题,引入了“变量捕获” 在 [想要捕获的变量]

    connect(button,&QPushButton::clicked,this,[button,this](){
         qDebug()<< "lambda 被执行了!!";
        button->move(300,300);
         this->move(100,100);
    });

如果当前lambda想捕获更多变量,使用 【=】,捕获所有变量。

    QPushButton* button = new QPushButton(this);
    button->setText("按钮");
    connect(button,&QPushButton::clicked,this,[=](){
         qDebug()<< "lambda 被执行了!!";
        button->move(300,300);
         this->move(100,100);
    });

如果后续我们的槽函数比较简单而且是一次性使用的们就经常会写作这种lambda的形式。
回调函数执行时机不确定,不确定

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

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

相关文章

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; h…

差异分析的结果各种热图,火山图,箱式图可视化作图教程

1. 基因表达的热图绘制 1.1 根据所有差异基因绘制基因表达的聚类热图 视频教程: https://www.bilibili.com/video/BV13m421g7wv/ 1.2 绘制top差异基因表达的聚类热图 视频教程: https://www.bilibili.com/video/BV1jZ42147KP/ 1.3 绘制感兴趣基因的聚类热图 视频教程: http…

一招教你选出独立站爆品

独立站选品其实是让很多卖家感到头大的问题&#xff0c;明明选了一个在其他平台是爆款的品&#xff0c;放到独立站上就是卖不起量&#xff0c;有自己想卖的产品却找不到好的供应商。对于这些问题&#xff0c;主要还是因为在选品时照搬电商平台的选品思路&#xff0c;没有认清自…

2024年中级消防设施操作员(考前冲刺)证考试题库及中级消防设施操作员(考前冲刺)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年中级消防设施操作员&#xff08;考前冲刺&#xff09;证考试题库及中级消防设施操作员&#xff08;考前冲刺&#xff09;试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作…

5个超牛的Java开源OA项目(强烈推荐)

1. O2OA ——开源地址&#xff1a;https://gitee.com/o2oa/O2OA 概述&#xff1a; O2OA 是一款真正全代码&#xff08;包含服务器、安卓以及IOS客户端&#xff09;开源的企业应用定制化开发平台&#xff0c;适用于企业OA、协同办公类信息化系统的建设和开发。技术&#xff1a;…

HarmonyOS 开发者联盟高级认证最新题库

本篇文章包含 Next 版本更新后高级认证题库中95%的题目。 答案正确率 50-60%&#xff0c;答案仅做参考。 请在考试前重点看一遍题目&#xff0c;勿要盲目抄答案。 欢迎在评论留言正确答案和未整理的题目。 1、下面关于方舟字节码格式PREF_IMM16_v8_v8描述正确的是 16位前缀操作…

【wyTest自动化测试】快照校验模式的创新实践

本文将以遥遥领先的【华为商城】web端自动化为例&#xff0c;进行测试脚本开发的讲解。仅用于教学指导使用&#xff0c;如有侵权&#xff0c;请联系我删除。 一、测试脚本结构 按照教程惯例&#xff0c;开篇先展示一下测试脚本的标准结构模版: case_xx特性_xx001.py class Cas…

挖矿宝藏之硬盘分区

目录 一、硬盘分区的相关知识 二、主分区、活动分区、扩展分区、逻辑盘和盘符 三、硬盘分区原因 1.减少硬盘空间的浪费 2.便于文件的分类管理 3.有利于病毒的防治 四、硬盘分区的原则 1.方便性 2.实用性 3.安全性 五、利用Diskpart进行分区 1.命令行工具Diskpart …

信创学习笔记(四),信创之数据库DB思维导图

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 一. 信创学习回顾 1.信创内容 信创内容思维导图 2.信创之CPU芯片架构 信创之CPU芯片架构思维导图 3.信创之操作系统OS 信创之操作系统OS思维导图 二. 信创之国产数据库DB思维导图 …

# Redis 入门到精通(六)-- redis 事务

Redis 入门到精通&#xff08;六&#xff09;-- redis 事务 一、redis 事务–redis事务简介 1、Redis 执行指令过程中&#xff0c;多条连续执行的指令被干扰&#xff0c;打断&#xff0c;插队&#xff0c;就会造成结果偏差。 2、什么是 redis 事务&#xff1f; redis 事务&…

关于Ubuntu22.04中的Command ‘vim‘ not found, but can be installed with:

前言 在Ubuntu终端编辑文本内容时需要利用vim&#xff0c;但新安装的虚拟机中并未配置vim&#xff0c;本文记录了vim的安装过程。 打开终端后&#xff0c;在home目录中输入 vim test.txt但提示报错&#xff0c;提示我们没有找到vim&#xff0c;需要通过以下命令进行安装&…

探索Python应用领域|Python有多强大?高效又实用!

Python是一种广泛使用的解释型、高级的和通用的编程语言&#xff0c;它拥有动态类型系统和垃圾回收机制&#xff0c;能够自动管理内存的使用&#xff0c;并且其本身具有简洁性、易读性的特点以及拥有一个巨大而广泛的标准库&#xff0c;功能强大适合各种应用场景和项目开发的需…

AI基于大模型语言存在的网络安全风险

目的&#xff1a; 随着大语言模型&#xff08;LLM&#xff09;各领域的广泛应用&#xff0c;我们迫切需要了解其中潜在的风险和威胁&#xff0c;及时进行有效的防御。 申明&#xff1a; AI技术的普及正当的使用大模型技术带来的便利&#xff0c;切勿使用与非法用途&#xff…

GPU云服务器------2秒文生图

GPU云服务器------2秒文生图 GPU云服务器AIGC来也开通GPU服务配置安全组规则远程连接GPU云服务器配置nginx用户文生图开启AiaccTorch禁用AiaccTorch切换模型使用LoRA插件使用Controlnet插件 服务器监控实例释放 好消息&#xff01;好消息&#xff01;阿里云服务器ECS推出了GPU云…

SSH讲解(重点:CentOS7)

第一章&#xff1a;SSH服务 1.1 SSH是什么&#xff1f; SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令…

DP(5) | 完全背包 | Java | 卡码52, LeetCode 518, 377, 70 做题总结

完全背包 感觉越写越糊涂了&#xff0c;初始化怎么做的&#xff1f;递推公式怎么来的&#xff1f; 状态变量 初始化 f[0][0] 0代码 这里的 f[i][j] f[i][j-w[i]]&#xff0c;就是和0-1背包最大的不同 for(int i1; i<n; i) { //物品ifor(int j1; j<m; j) {if(j<w[…

Kotlin中Unit、Any和Nothing

Unit Unit是一个特殊的类型&#xff0c;它表示“没有意义的值”的单元类型。在Kotlin中&#xff0c;当你不需要函数返回任何具体值时&#xff0c;可以使用Unit类型。 和Java 中 void一样。 Any 所有非空类的父类 Any?所有类的父类 类似Java中Object Nothing 表示一个函数或…

python的日期和时间

时间与日期 基础知识&#xff08;python的时间表示方法&#xff09; 时间戳 时间戳是一个用于表示特定时间点的方式&#xff0c;它表示自1970年1月1日00:00:00 UTC&#xff08;协调世界时&#xff09;以来经过的秒数。时间戳通常用于编程中&#xff0c;因为它提供了一种简单的方…

运维-Docker-黑马

运维-Docker-黑马 编辑时间&#xff1a;2024/7/15 来源&#xff1a;黑马程序员 docker&#xff1a;快速构建&#xff0c;运行&#xff0c;管理应用的工具 Docker安装 部署mysql 命令解读