QT开发笔记:信号和槽

乱码问题:

出现乱码问题原因只有一个:就是编码方式不匹配!!!
中文常见汉字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://xiahunao.cn/news/3246022.html

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

相关文章

SpringBoot使用本地缓存——Caffeine

SpringBoot使用本地缓存——Caffeine 缓存&#xff0c;想必大家都用过&#xff0c;将常用的数据存储在缓存上能在一定程度上提升数据存取的速度。这正是局部性原理的应用。之前用的缓存大多是分布式的&#xff0c;比如Redis。使用Redis作为缓存虽然是大多数系统的选择&#xf…

基于springboot和mybatis的RealWorld后端项目实战三之添加swagger

pom.xml添加依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><arti…

Linux多进程

父子进程 一个进程可以创建另一个进程吗&#xff1f; 干想代码可能很犹豫&#xff0c;因为我们从来都没有见过创建新进程的代码。但是&#xff1a; 短短几秒钟&#xff0c;就创建了两个进程。这些进程是系统创建的吗&#xff1f;不是。一个是小爱同学创建的&#xff0c;另一个…

CSS实现加载动画

需求&#xff1a;在开发过程中&#xff0c;我们会经常遇到一些基本的加载动画需求。这里我们简单介绍几个加载动画&#xff0c;主要是通过使用css的animation和transition的属性进行实现的动画和过渡效果。 语法&#xff1a; animation: name duration timing-function delay…

电脑录屏录音软件,拥有这3款就足够

在信息化的时代&#xff0c;电脑早已成为我们生活中的得力助手。而电脑录屏录音软件&#xff0c;就像是一位能够帮助我们捕捉到屏幕上一切的魔法师&#xff0c;用其独特的魔力&#xff0c;将屏幕上的精彩瞬间和动人声音一一捕捉&#xff0c;永久珍藏。 电脑录屏与录音并不是一…

Java | Leetcode Java题解之第238题除自身以外数组的乘积

题目&#xff1a; 题解&#xff1a; class Solution {public int[] productExceptSelf(int[] nums) {int length nums.length;// L 和 R 分别表示左右两侧的乘积列表int[] L new int[length];int[] R new int[length];int[] answer new int[length];// L[i] 为索引 i 左侧…

LabVIEW机器学习实现外观检测

介绍如何利用LabVIEW平台结合机器学习技术实现对被测样品的外观检测。详细说明了硬件选择、算法使用、操作步骤以及注意事项。 硬件选择 工业相机&#xff1a;高分辨率工业相机&#xff08;如Basler、FLIR等&#xff09;用于采集样品的图像。 照明设备&#xff1a;均匀的LED照…

亲子母婴行业媒体邀约宣发资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 亲子母婴行业是一个综合性的产业&#xff0c;涉及多个领域&#xff0c;包括儿童食品&#xff0c;儿童玩具&#xff0c;服装&#xff0c;洗护&#xff0c;月子中心&#xff0c;母婴护理&a…

江科大SPI教程听课笔记

原理部分我打算听江科大的课复习一下&#xff0c;代码部分工作大概率用HAL库敲了。 SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线。 硬件资源方面需要四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO (Master Input Slave…

苏州大视通特种镜头规格书-360内度壁镜头-型号DST36023066

360内壁检测镜头 产品特点 专为内壁检测开发的特种镜头&#xff1b;可实现大视场角的内壁检测&#xff1b;最大支持直径 5mm-120mm&#xff0c;深度 4mm-120mm的内孔检测&#xff1b;最大支持 2/3”相机&#xff0c;成像圈为 φ6mm&#xff1b;可定制光阑孔径以调节亮度和景深…

【FPGA】优雅地使用ILA进行FPGA硬件调试

Vivado&#xff08;Vitis&#xff09;版本&#xff1a;2020.2FPGA开发板&#xff1a;Microphase Z7-Lite 7020开发板 FPGA设计调试流程 FPGA开发是一个不断迭代的过程&#xff0c;一般的FPGA设计流程一般包含下面几个步骤&#xff1a; 硬件架构和算法验证&#xff1a;实现需要…

CV每日论文--2024.7.16

1、Radiance Fields from Photons 中文标题&#xff1a;光子的辐射场 简介&#xff1a;神经辐射场(NeRFs)已成为从多个视角捕获的图像进行高质量视图合成的事实标准方法。然而,在野外环境下捕获图像时,仍存在许多挑战,例如低光、高动态范围或快速运动导致的模糊重建和明显的伪…

Apache trino的ldap认证开启

作者&#xff1a;櫰木 1、背景 由于trino 默认没有开启用户认证体系&#xff0c;需要ldap用户进行认证。开启tls和ldap用户认证&#xff0c;提高安全性。 2、配置 前置条件。 trino 集群已经部署完成 ldap 服务 openjdk 版本大于11.0.17 生成证书 keytool -genkeypair…

前端pc和小程序接入快递100(跳转方式和api方式)====实时查询接口

文章目录 跳转方式微信小程序&#xff08;我以uniapp为例&#xff09;pc api接入说明关于签名计算成功示例 跳转方式 没有任何开发成本&#xff0c;直接一键接入 可以直接看官方文档 https://www.kuaidi100.com/openapi/api_wxmp.shtml 微信小程序&#xff08;我以uniapp为例…

SQL,python,knime将数据混合的文字数字拆出来,合并计算(学习笔记)

将下面将数据混合的文字数字拆出来&#xff0c;合并计算 一、SQL解决&#xff1a; ---创建表插入数据 CREATE TABLE original_data (id INT AUTO_INCREMENT PRIMARY KEY,city VARCHAR(255),value DECIMAL(10, 1) );INSERT INTO original_data (city, value) VALUES (上海0.5…

十一、Java多线程(模块16-17)

十一、Java多线程 day08-线程安全,死锁,状态,通讯,线程池今日目标1 线程安全1.1 线程安全产生的原因注意 : 以上代码是有问题 , 接下来继续改进通过上述代码的执行结果 , 发现了出现了负号票 , 和相同的票 , 数据有问题 1.2 线程的同步1.3 同步代码块1.4 同步方法1.5 Lock锁 2 …

电脑QQ录屏,2个方法轻松搞定电脑录屏

“电脑QQ也有录屏功能吗&#xff1f;我使用电脑QQ多年居然不知道QQ还有录屏功能。电脑QQ录屏功能怎么使用啊&#xff1f;有没有会的小伙伴可以教教我&#xff1f;先谢谢大家啦&#xff01;” QQ作为陪伴我们多年的“老朋友”&#xff0c;它不仅是我们与朋友家人沟通的重要桥梁…

揭秘OpenCV:探寻视觉世界的轮廓之谜

揭秘OpenCV&#xff1a;探寻视觉世界的轮廓之谜 1. 介绍1.1 什么是轮廓检测&#xff1f;1.2 OpenCV 中的轮廓检测应用 2. 准备工作2.1 安装 OpenCVWindows 用户:macOS 用户:Linux 用户: 2.2 加载图像2.3 图像处理&#xff08;转换图像颜色空间&#xff09;2.4 表格描述 3. 轮廓…

对某根域的一次渗透测试

前言 两个月之前的一个渗透测试项目是基于某网站根域进行渗透测试&#xff0c;发现该项目其实挺好搞的&#xff0c;就纯粹的没有任何防御措施与安全意识所以该项目完成的挺快&#xff0c;但是并没有完成的很好&#xff0c;因为有好几处文件上传没有绕过&#xff08;虽然从一个…

前端基础之Flex布局

【图书推荐】《HTML5CSS3 Web前端开发与实例教程&#xff08;微课视频版&#xff09;》-CSDN博客 Flex布局概述 Flex布局全称为Flexible Box布局模式&#xff0c;是CSS3规范中一项革命性的强大布局技术。它以“弹性”为核心理念&#xff0c;旨在提供一种更为灵活且功能丰富的…