三、QPushButton的使用,信号和槽

news2024/12/29 10:55:32

QT从入门到实战学习笔记

  • 一、QPushButton的创建
  • 二、中文要设置成UTF-8格式才不会乱码
  • 三、对象树
    • 1、验证被释放掉
  • 四、QT窗口坐标系
  • 九、信号和槽---点击按钮关闭窗口
    • 1、查询signal信号的定义(帮助文档)
    • 2、搜索QWidget查找槽函数(slot是槽的意思)
  • 五、自定义信号和槽
    • 1、要求
    • 2、创建Teacher和Student类
    • 3、在窗口中定义Teacher对象和Student对象,并定义一个classIsOver()来表示下课了,触发hunger()信号
  • 六、自定义的信号和槽发生重载的解决
    • 1、进行重载
    • 2、改变链接(connect)
    • 3、QString转换成char *方法
  • 七、信号连接信号
  • 八、QT4版本信号槽连接
    • 1、拓展
    • 2、QT4版本以前的信号和槽连接方式
  • 九、Lambda表达式
  • 十、信号槽的总结

一、QPushButton的创建

在这里插入图片描述
QPushButton Class中:
其中Header表示所要引的头文件

Qmake表示所需要的模块

Inherits表示它的父类是:QAbstractButton
点击QAbstractButton可以看QAbstractButton的父类

Inherited By是子类:QCommandLinkButton

Public Function中:构造函数

在这里插入图片描述

#include "mymainwindow.h"
#include<QPushButton>   //按钮控件的头文件

myMainWindow::myMainWindow(QWidget *parent)   //默认函数值在头文件里和原文件里只有一个存在默认值,这里是一个构造函数的意思,主要是对对象parent初始化,这里继承了父类的默认值0
    : QWidget(parent)
{
    //创建一个按钮
    QPushButton * btn = new QPushButton;
    //btn->show();  //端口默认不显示,所以要show一下,show()的方式是默认用顶层的弹出窗口控件
    //让btn对象  依赖在myWidgt窗口中
    btn->setParent(this);   //设置父类

    //显示文本
    btn->setText("第一个按钮");


    //创建第二个按钮,弊端:按照控件的大小来创建的窗口
    QPushButton * btn2 = new QPushButton("第二个按钮",this);    //这里要是不new就直接执行析构函数了

    //移动btn2按钮,因为把btn按钮覆盖了
    btn2->move(100,100);

    //按钮可不可以,重新制定大小
    btn2->resize(50,50);

    //重置窗口的大小
    resize(600,400);

    //设置固定窗口大小
    setFixedSize(600,400);

    //设置窗口标题
    setWindowTitle("第一个窗口");
}

myMainWindow::~myMainWindow()
{
}

二、中文要设置成UTF-8格式才不会乱码

在这里插入图片描述
在工具选项中
在这里插入图片描述
选择文本编辑器件,默认编码选择UTF-8

三、对象树

在这里插入图片描述
在这里插入图片描述
构造是从上往下,析构是从下往上释放
只要指定为父亲他都会把你释放掉

1、验证被释放掉

在这里插入图片描述
右键文件夹,点击Add New…(新建文件)
在这里插入图片描述
选中C++ Class
在这里插入图片描述
创建名为MyPushButton
父类选择QWidget
点击下一步
在这里插入图片描述
点击完成
在这里插入图片描述
建立成功
在这里插入图片描述
父类改成QPushButton
在这里插入图片描述
设置QDebug调试模式
在这里插入图片描述
修改mymainwindow.cpp文件设置pushbutton为子类
在这里插入图片描述
运行程序,首先出现我的按钮构造类
在这里插入图片描述
关掉窗口后,先访问父类,再访问子类,然后析构释放子类,再释放父类

四、QT窗口坐标系

在这里插入图片描述

九、信号和槽—点击按钮关闭窗口

1、查询signal信号的定义(帮助文档)

在这里插入图片描述
先搜索QPushButton类,查询里面内容
在这里插入图片描述
发现signals相关,其中4个继承与父类QAbstractButton
3个继承与父类QWidget
2个继承与父类QObject
在这里插入图片描述
点开父类进行观看
在这里插入图片描述
有四个信号,第一个是点击
第二个摁下
第三个释放
第四个切换(比如摁一下就开,摁一下就关)这个是有一个状态
在这里插入图片描述

2、搜索QWidget查找槽函数(slot是槽的意思)

在这里插入图片描述
找到槽函数
在这里插入图片描述
点击close,有介绍
在这里插入图片描述
这种有小凹槽的都是槽函数
在这里插入图片描述
运行后点击我的按钮确实界面被关闭了。

五、自定义信号和槽

在这里插入图片描述

1、要求

在这里插入图片描述
创建类,其中QObject是最全的控件,有这个我们就可以不用去管释放的问题。
在这里插入图片描述

2、创建Teacher和Student类

在这里插入图片描述
Teacher类作为信号的发送者,定义了一个hungry信号
在这里插入图片描述
Student类作为信号的接受者,写一个槽为treat()
在这里插入图片描述

3、在窗口中定义Teacher对象和Student对象,并定义一个classIsOver()来表示下课了,触发hunger()信号

在这里插入图片描述

六、自定义的信号和槽发生重载的解决

1、进行重载

在这里插入图片描述
重载后出现2个hungry
此时之前的connect就不能用了,得改变

2、改变链接(connect)

在这里插入图片描述
void(Teacher:: * teacherSignal)(QString) = &Teacher::hungry;
void(Student:: * studentSlot)(QString) = &Student::treat;
进行变量参数设置

改变触发信号设置

3、QString转换成char *方法

在这里插入图片描述
可以查找帮助文档中的QByteArray
查看所要转换成的数据类型在这里插入图片描述

七、信号连接信号

在这里插入图片描述
在这里插入图片描述
可以如上上图信号连接信号,也可以断开信号

八、QT4版本信号槽连接

1、拓展

(1、信号可以连接信号
(2、一个信号可以连接多个槽函数
(3、多个信号可以连接同一个槽函数
(4、信号和槽的参数,必须类型一一对应
(5、信号和槽的参数个数,是不是要一致?信号的参数个数 可以多于槽参数的个数

2、QT4版本以前的信号和槽连接方式

QT4的信号槽连接无参的版本

connect(zt,SIGNAL(hungry()),std,SLOT(treat()));

QT4版本优点,参数直观,缺点:类型不做检测
QT5以上支持QT4的写法,反之不支持

九、Lambda表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
&{
btn->setText(“aaaa”);
btn2->setText(“bbbb”);
}();
其中尾巴的()前面的代码是一个函数声明,带上尾巴()才是函数调用
在这里插入图片描述
在这里插入图片描述
其中m只在它那个语句中改变

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一般用=值函数传递

在这里插入图片描述

十、信号槽的总结

在这里插入图片描述

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

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

相关文章

华为freebuds 5无线充电充不上电怎么办?

相信很多人都会遇到跟我一样的问题&#xff0c;华为FreeBuds 5无线充电充不进电是怎么回事&#xff1f;为此我专门整理了以下的经验&#xff0c;相信对大家有所帮助。 1. 充电时要把耳机盒保护套拆下来&#xff0c;耳机盒与充电底座之间不要有东西挡着。这样耳机盒充电时可以更…

jenkins的环境搭建

jenkins 环境 安装 我之前使用war安装、安装比较简单、就是jenkins的 对应的插件不能下载下来、后来发现是版本的问题、使用docker-compose 安装、jenkins安装 插件很容易安装下来 1、安装jdk 解压jdk 配置环境变量 #set java environment JAVA_HOME/usr/local/jdk1.8.0_281…

基于单片机和GSM短信模块的家庭防盗火灾安全报警系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;627短信 获取完整论文报告&#xff08;含无水印图片和代码&#xff09; 本系统主要由单片机和GSM短信模块组成&#xff0c;借助最可靠、最成熟的GSM移动网络&#xff0c;以最直观的中文短消息或电话形式&#xff0c;直接把…

392.04亿元?台积电公布下一代工艺发展路线图,2纳米2025 年投产

台积电近日在日本举办了一次研讨会&#xff0c;详细介绍了N3E工艺节点的最新进展和引人注目的性能提升。此外&#xff0c;台积电还公布了令人期待的下一代N2工艺的发展路线图。 台积电副总裁Kevin Zhang透露&#xff0c;公司正以迅猛速度发展&#xff0c;预计2022年的投资金额将…

360测试开发技术面试题目

目录 一、java方面 二、Linux方面 三、数据库方面 四、性能测试方面 五、HTTP协议方面 六、其他 总结&#xff1a; 最近面试了360测试开发的职位&#xff0c;将面试题整理出来分享~ 一、java方面 1、java重载和重写的区别 重载overloading 多个方法、相同的名字&#x…

CF578A(直线方程 + 数学) 1700

CF578A(直线方程 数学) 1700 有一条折线 &#xff0c; 这个折线经过这样一组点&#xff1a; (0,0) - (x,x) - (2x,0) - (3x,x) - (4x,0) - ....现给出折线上一点 &#xff0c; 求 x 的最小值 思路&#xff1a;我们不妨用解方程的思想 &#xff0c;先写出折线的方程&#xf…

AIGC-stable-diffusion系列1- stable-diffusion-webui

安装方法1&#xff0c;源码安装 参考 repo参考地址&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui python下载地址&#xff1a;https://www.python.org/downloads/release/python-3106/ git下载地址&#xff1a;https://git-scm.com/download/win 官…

逻辑回归模型

目录 引言 逻辑回归的理论基础 逻辑回归的实践 实战案例&#xff1a;银行营销预测 超越逻辑回归 引言 我们在上一篇文章中讨论了线性回归模型&#xff0c;探讨了如何利用它来解决连续变量预测的问题。今天&#xff0c;我们将转向一种新的模型——逻辑回归&#xff0c;它用…

TIDB v7.1 reource control资源管控特性体验贴

作者&#xff1a; bert 原文来源&#xff1a; https://tidb.net/blog/60c87e38 TIDB v7.1 reource control资源管控特性体验贴 1. 使用场景&#xff1a; 定义&#xff1a;TIDB的资源管控 (Resource Control) &#xff0c;使用资源管控特性&#xff0c;将用户绑定到某个资源…

摇骰子设计与实现(uni-app微信小程序)

文章目录 摇骰子设计与实现准备工作实现步骤以及思路第一步&#xff1a;实现准备状态第二步&#xff1a;实现晃动中状态第三步&#xff1a;等待开起状态第四步&#xff1a;开启后状态部分优化 总代码 摇骰子设计与实现 手机摇一摇可以摇骰子&#xff0c;上划可查看结果&#x…

桥梁健康监测:时刻感知桥梁“脉搏”

随着交通量的不断增加&#xff0c;桥梁作为一种重要的交通基础设施&#xff0c;其安全性和可靠性面临着日益严峻的挑战。桥梁健康监测是保障桥梁安全和预防桥梁事故的重要手段&#xff0c;本文将介绍桥梁健康监测的意义、技术手段和应用案例。 一、桥梁健康监测的意义 保障交通…

解决React18+ts项目导入模块的声明报错

路径配置 项目路径别名的配置 ts对指向src的目录提示是不支持的 所以需要手动配置符号指向 在vite.config.ts import path from path export default defineConfig({plugins:[react()],resolve:{alias:{"":path.resolve(__dirname, ./src)}} })但这时path模块引入会…

阿里30K测试开发岗位面试过程

面试总结 a.测开岗考察内容与软开岗类似&#xff0c;难度相对较小 b.阿里是一面技术面试官协调推进面试流程&#xff0c;HR参与较少 c.遇到的面试官都很nice 一面 自我介绍项目C基础 C底层如何进行内存分配 C是面向对象的编程&#xff0c;类中默认的拷贝构造函数是浅复制…

使用 ANTMAN 工具替换 OceanBase 云平台节点

OceanBase 环境基本都会先安装 OCP 来部署、监控、运维数据库集群。但如果有机器过保等问题&#xff0c;就需要有平稳的 OCP 节点的替换方案。 作者&#xff1a;张瑞远 上海某公司 DBA&#xff0c;曾经从事银行、证券数仓设计、开发、优化类工作&#xff0c;现主要从事电信级 I…

旅游卡景区购票小程序开发定制

旅游业的蓬勃发展&#xff0c;越来越多的景区开始推出自己的旅游卡&#xff0c;以吸引更多的游客前来观光。同时&#xff0c;为了更加便捷地服务游客&#xff0c;许多景区也开始启用小程序来进行门票售卖和游客管理。针对这种情况&#xff0c;专业的小程序开发公司推出了定制旅…

机器学习-特征选择:如何使用相关性分析精确选择最佳特征?

一、引言 「特征选择」在机器学习中发挥着重要的作用&#xff0c;它的目标是从众多可用特征中挑选出最具预测能力的特征子集&#xff0c;以提高模型性能和泛化能力。然而&#xff0c;由于现实中的数据集通常具有大量特征和复杂的相关性&#xff0c;特征选择变得非常具有挑战性。…

[ 云计算 | AWS ] IAM 详解以及如何在 AWS 中直接创建 IAM 账号

本章节主要介绍 IAM 相关知识点以及在 AWS 控制台窗口如何创建一台 Amazon IAM 账号。 文章目录 一、什么是 IAM&#xff1f;二、IAM 常见种类2.1 EIAM2.2 CIAM2.3 云厂商 IAM 三、账号&#xff08;Account&#xff09;三户模型 四、认证&#xff08;Authentication&#xff09…

java使用Tess4J实现OCR图片文字识别

目录 介绍一、maven如下二、下载语言模型1.下载语言模型2.百度云下载 三、测试1.测试代码2.测试图片3.效果 介绍 Tess4J 是 Tesseract OCR 的 java api 实现库&#xff0c;你可以通过 java 调用来轻松的实现图片识别并提取文字&#xff0c;也就是 OCR 图片提取文字技术。 Tes…

黑客是什么?想成为黑客需要学习什么?

什么是黑客 在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而&#xff0c;若你想知道如何成为一名黑客&#xff0c;只要牢记两点即可。 这是一个社区和一种共享文化&#xff0c;可追溯到那群数十年前使…

mybits相关知识点

这里写目录标题 入门第一个程序步骤配置sql&#xff0c;建立数据库连接 jdbc数据库连接池简介连接池的切换总结 lombok Mybatis基础操作&#xff08;注解&#xff09;准备工作类型对应 删除简介具体代码 预编译简介优点优点1优点2 预编译的实现总结 新增简介具体代码 新增&…