Qt学习笔记(一)

信号与槽机制

  • 本质上就是观察者模式;

------------------------------------------信号槽是Qt框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect) 函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot)) 绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。------------------------------------------------------------------自定义信号槽需要注意的事项:
------------------------------------------------------发送者和接收者都需要是Q0bject的子类(当然,槽函数是全局函数、Lambda表达式等无需接收者的时候除外); .信号和槽函数返回值是void信号只需要声明,不需要实现槽函数需要声明也需要实现槽函数是普通的成员函数,作为成员函数,会受到public、 private、protected的影响;使用emit在恰当的位置发送信号;使用connect()函数连接信号和槽。任何成员函数、static函数、全局函数和Lambda 表达式都可以作为槽函数信号槽要求信号和槽的参数一致,所谓一致,是参数类型一致。如果信号和槽的参数不-,允许的情况是,槽函数的参数可以比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。这是因为,你可以在槽函数中选择忽略信号传来的数据(也就是槽函数的参数比信号的少)

核心机制与常用控件

  • Qt的优点:
  • 1、跨平台;
  • 2、接口的封装性好;
  • 3、内部有一套内存回收机制;
  • 4、轻量级的开发环境,可以做嵌入式开发;
语言:C++
----------------------------------------------------信号与槽机制:
-----------------connect函数继承关系及框架布局管理------------------------------Qt中常用的控件类:
------------------------
QPushButtons
QMainWindow
QDialog
模态和非模态
组合框文件操作
------------读文件:
---------
创建文件对象-------------文件路径打开文件及方式设定文件数据的二进制接收对象QByteArray读取文件操作
readAll readLine...关闭文件 close---------------------写文件:
--------------
有文件对象
打开文件及写文件的方式
写文件-----------write
关闭文件-----------------Qt中事件:
------------Qt中事件机制:
-------------------事件产生:
------------------
QApplication中产生接收系统中断信号产生QEvent事件对象事件派发:
--------------------
由QApplication中调用notify()函数将事件派发到QObject中所有控件事件的过滤:
-------------eventFilter:
---------------由具体控件执行,可重写这个函数、需要使用override若没有重写eventFilter,默认是不过滤-------------------------------------------------事件的分发:
-------------------
event()函数--------------------
对系统群发的事件进行分类可以对事件类型分类,并由false交给系统处理,若是true,则交给个人处理;事件的处理:
------------------
执行对事件的一些处理操作,
比如执行一些什么逻辑。常用的QEvent类:
---------------------QMouseEventQKeyEventQPaintEventQTimer定时器事件类Qt中的Tcp通信-----------------------------QTcpServerQTcpSocket
--------------------------------------------Qt5基本模块:
-----------------------QtNetwork
QtWidgets
QtWebEngins
QtChars
QtSQL
QtCore
QtGui
QtWebGL
QtQML
QtQuick
QtMulitmedia-----------------------------------
Qt手册:
----------------------------------------------
先看类的描述,再看所属模块,再看使用的头文件是那个,再看继承关系(用来查相关方法)
-------------------------------------------Qt中的坐标系(与笛卡尔坐标系的方向正好相反)及第一个交互控件:
------------------------------------------------------------------------------------QPushButton如果是最外层的控件,他的移动时的坐标以桌面左上顶点为原点(全局坐标系)。如果是内嵌的控件,那么就是外层的控件的左上顶点为原点(局部坐标系)。
-----------------------------------------------widget.cpp:
-----------------------------------------------------//用刷子把图片刷到调色板上:p.setBrush(QPalette::Window,QBrush(QPixmap("d:/Gril.png")));this->setPalette(p);//定义一个QPushBtton控件对象:this->loginBtn = new QPushButton("登录",this);//btn->setParent(this);//相较于局部(父对象的坐标系)this->loginBtn->move(10,10);this->registorBtn = new QPushButton("注册",this);//相较于局部(父对象的坐标系)this->registorBtn->move(150,10);//相较于全局的坐标系:this->move(10,10);--------------------------------------widget.h:
---------------------------------------
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTcpServer>
#include <QPushButton>
class Widget : public QWidget
{Q_OBJECT  //用来支持信号与槽的。
public:Widget(QWidget *parent = nullptr);//默认参数:父对象指针。//用来自动回收子控件的资源的。~Widget();//析构:
private:QPushButton* loginBtn;QPushButton* registorBtn;
};
#endif // WIDGET_H-----------------------------------------------------------main.cpp:
-----------------------------------------
#include "widget.h"
#include <unistd.h>
#include <QApplication>
//QApplication类是一个核心类:
//一个Qt工程有且只能有一个QApplication类对象。
//QApplication类对象是用来监控整个Qt工程中的控件的事件循环的。
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;//可展示的控件对象。w.show();//控件对象渲染。return a.exec();//由QApplication对象调用exec()进入到事件循环。
}
-----------------------------------------------------------------------------------Qt对象树内存回收机制:(纯C++展示对象树机制)
---------------------------------------------------------------#include <iostream>
#include <list>
using namespace std;class Object
{
public:list<Object*> childList;
public:Object(Object* parent = nullptr){if(parent != nullptr){parent->childList.push_back(this);}}virtual ~Object(){for(Object* child : this->childList){delete child;}}
};class A : public Object
{int* p;
public:A(Object* parent = nullptr): Object(parent){cout << "A的构造" << endl;this->p = new int[1024];}~A(){if(this->p != nullptr){delete [] this->p;this->p = nullptr;}cout << "A的析构" << endl;}
};class B : public Object
{int* p;
public:B(Object* parent = nullptr): Object(parent){cout << "B的构造" << endl;this->p = new int[1024];}~B(){if(this->p != nullptr){delete [] this->p;this->p = nullptr;}cout << "B的析构" << endl;}
};int main()
{//Object obj;B b;A* a = new A(&b);return 0;
}-------------------------------------------------------
总结:在Qt中如果使用对象一定是QObject的子类,不然无法使用对象树。

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

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

相关文章

导致苹果IPA应用APP打开提示“已到期”的原因及解决办法

哈喽&#xff0c;大家好呀&#xff0c;淼淼又来和大家见面啦&#xff0c;有许多小伙伴们在使用iOS设备的时候&#xff0c;有时候可能会遇到打开某个IPA应用时出现“已到期”的提示&#xff0c;这种情况通常会发生在开发者证书过期、时间设置问题、重新签名错误等情况下。这一期…

力扣452 用最少数量的箭引爆气球 Java版本

文章目录 题目描述代码 题目描述 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完…

李沐46_语义分割和数据集——自学笔记

语义分割 语义分割将图片中的每个像素分类到对应的类别。 实例分割&#xff08;目标检测的进化版本&#xff09; 如果有物体&#xff0c;会区别同一类的不同物体。 语义分割重要数据集&#xff1a;Pascal VOC2012 %matplotlib inline import os import torch import torch…

Java -- (part12)

一.权限修饰符 1.属性:用private ->封装思想 2.成员方法public ->便于调用 3.构造public ->便于new对象 二.final关键字 1.修饰类 a.格式 -- public final class 类名 b.特点:不能被继承 2.修饰方法 a.格式:修饰符 final 返回值类型 方法名(形参){} b.特点…

C++内存管理——new/delete、operator new/operator delete

内存管理 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(sizeof(int) * 4);int* pt…

c++ lambda表达式的使用方法

c lambda表达式的使用方法 C11引入了lambda表达式&#xff0c;它是一种轻量级的匿名函数&#xff0c;允许我们在需要函数的地方直接定义函数&#xff0c;而无需专门声明函数。lambda表达式的语法简洁&#xff0c;并且非常灵活&#xff0c;可以捕获外部变量&#xff0c;具有与普…

Mapper 编写的常用方式

第一种&#xff1a;接口实现类继承 SqlSessionDaoSupport&#xff1a; 使用此种方法需要编写mapper 接口&#xff0c;mapper 接口实现类、mapper.xml 文件。 1&#xff1a; 在 sqlMapConfig.xml 中配置 mapper.xml 的位置 <mappers><mapper resource"mapper.x…

技术速递|.NET 智能组件简介 – AI 驱动的 UI 控件

作者&#xff1a;Daniel Roth 排版&#xff1a;Alan Wang AI 的最新进展有望彻底改变我们与软件交互和使用软件的方式。然而&#xff0c;将 AI 功能集成到现有软件中可能面临一些挑战。因此&#xff0c;我们开发了新的 .NET 智能组件&#xff0c;这是一组真正有用的 AI 支持的 …

OCP-数据库中的小米SU7

oracle ocp ​数据库中的SU7 ​好看又好用 需要找工作和落户的快来

帮助中心最核心的内容,你都知道吗?

帮助中心&#xff0c;其实就是个解决问题的“百事通”。当你在使用某产品时&#xff0c;遇到了一些问题&#xff0c;就可以到帮助中心去查询相关的信息以解决问题。很多公司都会搭建帮助中心&#xff0c;那么&#xff0c;帮助中心的核心内容都有哪些呢&#xff1f;这就是今天我…

Chrome 中安装 Vue 插件 vue-devtools 的简易教程

Vue.js 是一种流行的 JavaScript 框架&#xff0c;用于构建交互式的用户界面。它提供了丰富的开发工具和插件&#xff0c;其中一个非常有用的插件就是 vue-devtools。vue-devtools 可以让开发者在 Chrome 浏览器中轻松调试和检查 Vue 组件的状态、事件和数据流。本篇教程将向你…

损失函数:Cross Entropy Loss (交叉熵损失函数)

损失函数&#xff1a;Cross Entropy Loss &#xff08;交叉熵损失函数&#xff09; 前言相关介绍Softmax函数代码实例 Cross Entropy Loss &#xff08;交叉熵损失函数&#xff09;Cross Entropy Loss与BCE loss区别代码实例 前言 由于本人水平有限&#xff0c;难免出现错漏&am…

【yolo数据集合并方法】

yolo数据集合并方法 1.数据集容2.数据集合并 1.数据集容 包含训练集、验证集和测试集。 每一个数据集中包含图像文件夹和标签文件夹。 yaml文件中定义了配置参数&#xff0c;包括目标识别的class类别&#xff1a; 2.数据集合并 需要修改labels文件夹下txt文件class信息&…

记录shell编程中$1,$@等符号的含义

笔者最近老是遇到shell中的$相关的题目&#xff0c;于是打算写篇文章记录一下。考虑到并没有特别多需要解释的内容&#xff0c;所以并不会进行介绍&#xff0c;上图上表上代码&#xff0c;让机器说话&#xff0c;machine always right test.sh #/bin/bash echo $# $# echo …

gcc原理和使用

gcc gcc是什么 GCC&#xff0c;全称 GNU Compiler Collection&#xff08;GNU 编译器套件&#xff09;&#xff0c;是一套功能强大的编程语言编译器&#xff0c;由自由软件基金会&#xff08;Free Software Foundation, FSF&#xff09;作为GNU项目的一部分开发和维护。它最初…

宝塔使用笔记

1.配置ssl 验证方式&#xff1a;文件验证和dns验证都试一下 参考&#xff1a; https://app.applebyme.cn/cloud/https/23050.html

自定义类型: 联合体和枚举

本文索引 1. 联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算 2. 枚举类型2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使用 前言 : 书接上文, 下面我将继续详解C语言的剩下两个自定义类型: 联合体和枚举 个人主页…

【Linux】tcpdump P2 - 捕获和查看网络数据包

文章目录 7. 选项 -r8. 主机选项9. 逻辑运算符10. 关键字 net11. 关键字 ether12. 关键字 ip6总结 本文主要介绍了如何使用tcpdump来捕获和查看网络数据包。 7. 选项 -r 如果你已经走到了这一步并且写入了一个.pcap文件&#xff0c;你知道你不能使用简单的文本编辑器来读取文…

Linux命令学习—DNS 服务器

1.1、DNS 服务器介绍 DNS domain name system 域名系统 1、网络中&#xff0c;计算机通过 IP 地址来通信 IP 地址记忆困难&#xff0c;为计算机起个好名字 域名概念的提出 DNS 服务&#xff1a;为主机建立 IP 地址与域名之间的映射关系&#xff0c;使用域名来唯一标识网络…