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://www.mfbz.cn/a/802838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端开发之盒子模型

目录 盒子分类 display属性 盒子内部结构特征 padding填充区 border边框区 margin外边距 盒子width和height边界 盒子分类 块级盒子&#xff08;又叫块级元素、块级标签&#xff09; 特征&#xff1a;独占一行&#xff0c;对宽度高度支持 如&#xff1a;p div ul li h1…

Android 11 HAL层集成FFMPEG

1.集成目录&#xff1a; android/vendor/noch/common/external/NoboMediaCodec 2.文件夹目录 3. Android.mk实现 # Copyright #LOCAL_PATH : $(call my-dir)SF_COMMON_MK : $(LOCAL_PATH)/common.mkinclude $(call first-makefiles-under,$(LOCAL_PATH))4.common.mk实现 # #…

图示 JVM 可达性分析算法

可达性分析算法&#xff1a; 以 GC Roots 为起始点进行搜索&#xff0c;可达的对象都是存活的&#xff0c;不可达的对象可被回收。 Java 虚拟机使用该算法来判断对象是否可被回收&#xff0c;GC Roots 一般包含以下内容&#xff1a; 虚拟机栈中局部变量表中引用的对象本地方法栈…

Docker安装Mysql8.0主要步骤及安装过程中遇到的问题

一、创建MySQL配置目录 mkdir -p /data/mysql/data /data/mysql/logs 二、创建MySQL8镜像 docker run -p 3306:3306 --name mysql8 --restart always \ -v /data/mysql/logs:/logs \ -v /data/mysql/data:/var/lib/mysql \ -v --privilegedtrue \ -e MYSQL_ROOT_PASSWORD123…

注册安全分析报告:OneApm

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

exif格式及解析库easyexif使用介绍

1. JPEG文件结构和EXIF数据的信息 JPEG文件以字符串"0xFFD8"开头表示图像信息开始,以字符串"0xFFD9"结尾表示图像信息结束。 在JPEG文件头中有一系列"0xFF??"格式的数据段,称为"标识",用来标记JPEG文件的信息段。 0xFFE0-0xFFEF之间…

隐藏需求缺失的4种解决技巧

在需求分析过程中&#xff0c;隐藏需求的缺失往往会造成项目范围扩张、成本增加&#xff0c;造成延期交付和风险增加等问题&#xff0c;直接影响客户满意度。而隐藏需求的挖掘和确认&#xff0c;有利于优化项目范围&#xff0c;提升产品质量&#xff0c;增强团队信心。 因此&am…

MySQL 数据库 day 7.16

ok了家人们今天继续记录一下数据库,看看今天学了什么。 一.事物概述 1.1 环境准备 -- 账户表 create table account( id int primary key auto_increment, name varchar(20), money double );insert into account values (null,张三,1000); insert into account values (n…

【iOS】——ARC源码探究

一、ARC介绍 ARC的全称Auto Reference Counting. 也就是自动引用计数。使用MRC时开发者不得不花大量的时间在内存管理上&#xff0c;并且容易出现内存泄漏或者release一个已被释放的对象&#xff0c;导致crash。后来&#xff0c;Apple引入了ARC。使用ARC&#xff0c;开发者不再…

英福康INFICON TWare 32 软件操作说明

英福康INFICON TWare 32 软件操作说明

CVE-2024-24549 Apache Tomcat - Denial of Service

https://lists.apache.org/thread/4c50rmomhbbsdgfjsgwlb51xdwfjdcvg Apache Tomcat输入验证错误漏洞&#xff0c;HTTP/2请求的输入验证不正确&#xff0c;会导致拒绝服务&#xff0c;可以借助该漏洞攻击服务器。 https://mvnrepository.com/artifact/org.apache.tomcat.embed/…

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…

【PyTorch快速入门教程】02 Jupyter notebook安装及配置

文章目录 1 安装 Jupyter notebook2 安装 ipykernel3 更改 jupyter 默认配置3.1 生成配置文件3.2 关键配置信息 4 扩展插件推荐参考 1 安装 Jupyter notebook 一行命令搞定 python -m pip install jupyter 现在就可以打开Jupyter notebook来运行python啦。 jupyter notebook…

网页设计:HTML标签

一、格式 dreamwave <!DOCTYPE html> <html ><head><meta charset"utf-8"><title>中文测试。。。。</title></head><body>这里是测试body测试内容。。。</body> </html> <head> 网页相关设置 &…

通过vagrant与VirtualBox 创建虚拟机

1.下载vagrant与VirtualBox【windows版本案例】 1.1 vagrant 下载地址 【按需下载】 https://developer.hashicorp.com/vagrant/install?product_intentvagranthttps://developer.hashicorp.com/vagrant/install?product_intentvagrant 1.2 VirtualBox 下载地址 【按需下载…

【漏洞复现】Rejetto HTTP文件服务器——远程命令执行(CVE-2024-23692)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 Rejetto HTTP文件服务器是一个轻量级的HTTP服务器软件&#xff…

最新vite脚手架配置ts-node工具

在使用最新的vite脚手架进行vue组件开发时&#xff0c;编写的ts文件工具函数的测试&#xff0c;除了应用到组件中进行页面测试&#xff0c;也可以使用ts-node工具进行单独的测试。 在使用最新版本的vite脚手架&#xff0c;生成的tsconfig配置会分出多个配置&#xff1a;tsconf…

【postgresql】时间函数和操作符

日期/时间操作符 加减操作符&#xff1a; 和 - 可以用于日期、时间、时间戳和时间间隔的加减操作。 SELECT 2024-01-01::date INTERVAL 1 day as "date"; ; -- 结果&#xff1a;2024-01-02SELECT 2024-01-01 12:00:00::timestamp - INTERVAL 2 hours as "…

类和对象的简述(c++篇)

开局之前&#xff0c;先来个小插曲&#xff0c;放松一下&#xff1a; 让我们的熊二来消灭所有bug 各位&#xff0c;在这祝我们&#xff1a; 放松过后&#xff0c;开始步入正轨吧。爱学习的铁子们&#xff1a; 目录&#xff1a; 一类的定义&#xff1a; 1.简述&#xff1a; 2…

leetcode简单题26 N.118 杨辉三角 rust描述

// 动态规划 pub fn generate(num_rows: i32) -> Vec<Vec<i32>> {let mut triangle: Vec<Vec<i32>> vec![];for i in 0..num_rows {let mut row vec![1; (i 1) as usize];for j in 1..i as usize {row[j] triangle[(i - 1) as usize][(j - 1)]…