QT学习日记一

  1. 创建QT文件步骤在这里插入图片描述
    在这里插入图片描述

这是创建之后widget.cpp和widget.h文件的具体代码解释,也是主要操作的文件,其中main.cpp不用操作,ui则是图形化操作界面,综合使用时,添加一个元件要注意重编名和编译一下,才能在widget这类文件中提示出来

//widget.h
#ifndef WIDGET_H            // 如果没有定义WIDGET_H宏,则定义它。这个宏防止头文件被多次包含。
#define WIDGET_H            // 定义WIDGET_H宏。#include <QWidget>          // 包含Qt库中的QWidget类的头文件。QWidget是所有UI对象的基类。QT_BEGIN_NAMESPACE          // 开始Qt命名空间的定义。
namespace Ui { class Widget; } // 前向声明Ui命名空间中的Widget类。这个类是由Qt Designer生成的,用于管理UI。
QT_END_NAMESPACE            // 结束Qt命名空间的定义。class Widget : public QWidget  // 定义Widget类,继承自QWidget类。
{Q_OBJECT               // 这是一个Qt宏,启用Qt的信号和槽机制。public:Widget(QWidget *parent = nullptr); // 构造函数,接受一个父窗口指针,默认值为nullptr(空指针)。~Widget();                         // 析构函数,销毁Widget对象。
//可以在这里声明信号槽函数,不过要添加关键字public slot:,类同publicprivate:Ui::Widget *ui;        // 指向Ui::Widget对象的指针,用于管理用户界面。
};#endif // WIDGET_H         // 结束WIDGET_H宏的条件编译。
//widget.cpp
#include "widget.h"          // 包含当前类的头文件,这个文件中定义了Widget类的声明和成员函数原型。
#include "ui_widget.h"       // 包含由Qt用户界面设计工具(Qt Designer)生成的头文件,这个文件中定义了Ui::Widget类,负责UI元素的布局和定义。Widget::Widget(QWidget *parent): QWidget(parent)       // 调用父类QWidget的构造函数,并将父窗口指针parent传递给它。父窗口指针用于指定当前窗口的父窗口。, ui(new Ui::Widget)    // 分配内存,创建一个新的Ui::Widget对象,并将其指针赋值给成员变量ui。Ui::Widget类由Qt Designer生成,用于管理窗口小部件的布局和控件。
{ui->setupUi(this);      // 调用Ui::Widget类的setupUi方法,初始化用户界面。这会将设计器中定义的UI元素(如按钮、标签等)设置到当前Widget对象中。//ui上的操作元件大多也在这里使用,比如connect
}Widget::~Widget()
{delete ui;              // 在析构函数中删除ui指针指向的Ui::Widget对象,释放其占用的内存,防止内存泄漏。
}
//在此处定义widget类中的函数

一、log输出

  1. 在Qt中进行log输出, 一般不使用c中的printf, 也不是使用C++中的cout, Qt框架提供了专门用于日志输出的类, 头文件名为 QDebug
  2. qDebug(), qWarning(), qInfo(), 和 qCritical()是用于日志记录调试输出的函数。它们分别用于不同级别的日志记录,帮助开发者在不同场景下记录和调试信息。
  • qDebug():用于开发阶段的调试信息,不重要的详细信息。
  • qWarning():用于警告信息,表示有潜在问题,但不一定是致命的。
  • qInfo():用于一般信息,常规运行时的状态信息。
  • qCritical():用于严重错误信息,表示重大问题或异常。
    在这里插入图片描述
  • 默认情况下日志信息是不会打印到终端窗口的, 如果想要实现这样的效果, 必须在项目文件中添加相关的属性信息----->打开项目文件(*.pro)找到配置项 config, 添加 console 控制台属性----->CONFIG += c++11 console

二、帮助

  • 将光标放在函数上,按 F2+FN 会跳转到 函数的定义。
  • 将光标放在函数上,按 Shift + F2+FN 会跳转到函数的声明(如果在头文件中声明)。
  • 将光标放在函数上,按 Ctrl + Shift + U 会查找函数在项目中的所有使用情况。
  • 将光标放在函数上,按 F1 +FN会打开Qt帮助窗口,显示 函数 的详细文档。

三、QT中的信号槽

  1. 在Qt中,信号和槽机制是一种用于对象之间通信的方式,特别适用于事件驱动的编程。信号和槽机制允许一个对象发送信号并且其他对象响应这些信号,即使它们对彼此一无所知。这种机制比传统的回调函数更灵活、更容易使用。
  2. 信号和槽机制的内部工作原理
  • 元对象系统(MOC)
    当您定义一个包含信号和槽的类时,Qt的元对象系统(MOC)会生成一些额外的代码。这些代码负责实现信号和槽的机制。MOC会为每个信号生成一个唯一的整数ID,并创建一个包含信号和槽信息的表。
  • 连接信号和槽
    当您调用connect函数时,Qt会将信号和槽的连接信息存储在QObject的内部数据结构中。每个QObject对象都有一个指向QMetaObject的指针,QMetaObject包含了该对象的所有元数据信息,包括信号和槽的连接信息。
  • 发射信号
    信号被发射时,Qt会查找与该信号连接的所有槽,并依次调用它们。对于同一线程中的连接,槽函数会立即被调用。对于跨线程的连接,信号会被放入接收者所在线程的事件队列中,等待事件循环调度执行。
  • 事件队列
    Qt使用事件队列和事件循环来管理跨线程的信号和槽连接。当跨线程信号被发射时,信号会被封装成一个事件,并放入接收者线程的事件队列中。接收者线程的事件循环会处理这些事件,并调用相应的槽函数。
  1. 连接信号和槽的函数connect()函数
函数原型(老旧的)QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));- sender:发出信号的对象的指针
- SIGNAL(signal()):发送者的信号。signal()是发送者类中的信号名称。()内的参数可以再一次细分信号类型。
- receiver:接收者对象指针。表示在当前的类里面
- SLOT(slot()):接收者的槽函数,使用SLOT宏来指定接收者类中的槽函数。slot()是接收者类中的槽函数名称。()内的参数可以再一次细分信号类型。
-------------------------------------------------------------------------------------------
connect函数相对于做了信号处理动作的注册
调用conenct函数的sender对象的信号并没有产生, 因此receiver对象的method也不会被调用
connect中的sender和recever两个指针必须被实例化了, 否则conenct不会成功

在这里插入图片描述

  • 在Qt中,槽函数是用于响应信号的函数。槽函数可以是任何符合签名要求的成员函数、全局函数或静态函数。它们在某些事件(由信号发射)发生时被调用。例如btnLogClickedSlotFun()就是自定义的槽函数。
  • 信号函数:clicked()、pressed()、released(),分别是点击,按下持续,释放
  1. 自定义信号和自定义槽函数
自定义信号的要求和注意事项:信号是类的成员函数
返回值必须是 void 类型
信号的名字可以根据实际情况进行指定
参数可以随意指定, 信号也支持重载
信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
信号函数只需要声明, 不需要定义(没有函数体实现)
在程序中发射自定义信号: 发送信号的本质就是调用信号函数
习惯性在信号函数前加关键字: emit, 但是可以省略不写
emit只是显示的声明一下信号要被发射了, 没有特殊含义
底层 emit == #define emit自定义槽函数的要求
槽函数必须是类的成员函数:
槽函数必须是继承自 QObject 的类的成员函数,不能是全局函数。槽函数必须标记为 slots 或使用 Q_SLOT 关键字:
在类定义中,槽函数需要使用 slots 或 Q_SLOT 关键字标记。例如:public slots:void mySlotFunction();槽函数的参数类型和数量必须与信号匹配:
槽函数的参数类型和数量必须与连接的信号一致。例如,如果信号的签名是 void signal(int, QString),那么槽函数的签名也应该是 void slot(int, QString)。槽函数的访问权限可以是 public、protected 或 private:
槽函数可以是 public、protected 或 private,这取决于类的设计和访问控制需求。
确保信号和槽的参数类型和顺序一致。如果不匹配,编译器不会报错,但运行时连接将失败,信号和槽之间不会通信。
槽函数的执行时间应尽量短,不要在槽函数中执行长时间阻塞的操作,因为这可能会阻塞事件循环,导致用户界面无响应。
如果不再需要信号和槽之间的连接,可以使用 disconnect 函数断开它们。可以断开特定的信号和槽,也可以断开对象之间所有的信号和槽。小窍门(在连接处加上dis即可)

在这里插入图片描述
5. 一个信号可以连接多个槽函数, 发送一个信号有多个处理动作,槽函数的执行顺序是随机的, 和connect函数的调用顺序没有关系,一个槽函数可以连接多个信号, 多个不同的信号, 处理动作是相同的

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

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

相关文章

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下&#xff0c;各种辅助工具层出不穷&#xff0c;妙笔生词智能写歌词软件便是其中之一。那么&#xff0c;它到底表现如何呢&#xff1f; 妙笔生词智能写歌词软件&#xff08;veve522&#xff09;的突出优点在于其便捷性和高效性。对于那些灵感稍…

【福利】代码公开!咸鱼之王自动答题脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 微信或QQ打开咸鱼之王小程序&#xff0c;进入答题界面&#xff0c;运行main.py。期间不要动鼠标。 可自行更改代码来适配自己的需求~ 可以按照示例图片…

LeetCode加油站(贪心算法/暴力,分析其时间和空间复杂度)

题目描述 一.原本暴力算法 最初的想法是&#xff1a;先比较gas数组和cost数组的大小&#xff0c;找到可以作为起始点的站点(因为如果你起始点的油还不能到达下一个站点&#xff0c;就不能作为起始点)。当找到过后&#xff0c;再去依次顺序跑一圈&#xff0c;如果剩余的油为负数…

MATLAB备赛资源库(1)建模指令

一、介绍 MATLAB&#xff08;Matrix Laboratory&#xff09;是一种强大的数值计算环境和编程语言&#xff0c;特别设计用于科学计算、数据分析和工程应用。 二、使用 数学建模使用MATLAB通常涉及以下几个方面&#xff1a; 1. **数据处理与预处理**&#xff1a; - 导入和处理…

OpenAI与Thrive Global推出Thrive AI Health:AI驱动的健康教练应用

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

算法金 | 12 个最佳 Python 代码片段,帮我完成工作自动化,香~

​大侠幸会幸会&#xff0c;我是日更万日 算法金&#xff1b;0 基础跨行转算法&#xff0c;国内外多个算法比赛 Top&#xff1b;放弃 BAT Offer&#xff0c;成功上岸 AI 研究院 Leader&#xff1b; Python是一种多功能的编程语言&#xff0c;它提供了各种功能和库来有效地自动化…

更深入了解汽车与航空电子等安全关键型应用的IP核考量因素

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV高级应用工程师 中国已经连续十多年成为全球第一大汽车产销国&#xff0c;智能化也成为了汽车行业发展的一个重要方向&#xff0c;同时越来越多的制造商正在考虑进入无人机和飞行汽车等低空设备&#xff0c;而所有的这些…

语义言语流畅性的功能连接和有效连接

摘要 语义言语流畅性(SVF)受损在多种神经系统疾病中都存在。虽然已经报道了SVF相关区域的激活情况&#xff0c;但这些区域如何相互连接以及它们在脑网络中的功能作用仍存在分歧。本研究使用功能磁共振成像评估了健康被试SVF静态和动态功能连接(FC)以及有效连接。观察到额下回(…

Filter 过滤器

1. 什么是过滤器 拦截不符合过滤要求的请求&#xff0c;使其无法到达目的地。 执行过程 主要用在&#xff1a;统一认证&#xff0c;统一编码设置 2. 创建过滤器 两种方式&#xff1a;与 servlet 雷同 ① 注解方式 &#xff08;/* 拦截所有请求&#xff09; WebFilter(fil…

从数据仓库到数据湖(下):热门的数据湖开源框架

文章目录 一、前言二、Delta Lake三、Apache Hudi四、Apache Iceberg五、Apache Paimon六、对比七、笔者观点八、总结八、参考资料 一、前言 在上一篇从数据仓库到数据湖(上)&#xff1a;数据湖导论文章中&#xff0c;我们简单讲述了数据湖的起源、使用原因及其本质。本篇文章…

【Windows11】Edge卡顿问题精准解决

目录 背景问题解决 背景 本机配置&#xff1a; CPU&#xff1a;i5-13600KF 内存&#xff1a;威刚 XPG龙耀 D300G 32G 6400 D5 固态&#xff1a;威刚 XPG翼龙 S70B 1T PCIe4.0 7400MB/s 带缓存 理论上这个配置多开个Edge轻轻松松。 已经尝试网上各种方法未果&#xff0c;包括不…

【状态估计】非线性非高斯系统的状态估计——离散时间的批量估计

上一篇文章介绍了离散时间的递归估计&#xff0c;本文着重介绍离散时间的批量估计。 上一篇位置&#xff1a;【状态估计】非线性非高斯系统的状态估计——离散时间的递归估计。 离散时间的批量估计问题 最大后验估计 目标函数 利用高斯-牛顿法来解决估计问题的非线性版本&a…

Qt/QML学习-ListView

QML学习 ListView例程视频讲解代码 main.qml import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15Window {id: windowwidth: 640height: 480visible: truetitle: qsTr("ListView")Rectangle {height: listView.heightwidth: listView.wi…

文件操作和IO流(Java版)

前言 我们无时无刻不在操作文件。可以说&#xff0c;我们在电脑上能看到的图片、视频、音频、文档都是一个又一个的文件&#xff0c;我们需要从文件中读取我们需要的数据&#xff0c;将数据运算后也需要将结果写入文件中长期保存。可见文件的重要性&#xff0c;今天我们就来简…

262个地级市-市场潜力指数(do文件+原始文件)

全国262个地级市-市场潜力指数&#xff08;市场潜力计算方法代码数据&#xff09;_市场潜力数据分析资源-CSDN文库 市场潜力指数&#xff1a;洞察未来发展的指南针 市场潜力指数是一个综合性的评估工具&#xff0c;它通过深入分析市场需求、竞争环境、政策支持和技术创新等多个…

2025考研~数据结构试卷

作者主页&#xff1a;知孤云出岫 数据结构试题 [TOC](数据结构试题)数据结构试卷一、选择题&#xff08;每题2分&#xff0c;共20分&#xff09;二、填空题&#xff08;每题3分&#xff0c;共15分&#xff09;三、简答题&#xff08;每题10分&#xff0c;共40分&#xff09;四…

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具&#xff0c;是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”&#xff0c;只发送源和目标之间的差异&#xff0c;因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…

图论---哈密顿回路的实现

开始编程前分析设计思路和程序的整体的框架&#xff0c;以及作为数学问题的性质&#xff1a; 设计思路&#xff1a; 利用邻接表存储图的结构&#xff0c;存储对应顶点和边作为无向图存边时正反都进行存储便于寻找路径对顶点的访问和路径走向进行记录使用回溯法&#xff0b;深度…

这不是在搞技术,而是在玩心态~

正文 大家好&#xff0c;我是bug菌~ 如今为制造业提供大型设备的研发型公司大多数都是做系统集成&#xff0c;一部分有技术实力的公司会把核心部分自研&#xff0c;其他相对比较通用的周边设备由其他公司产品来集成&#xff1b;也有一部分公司只是做做方案和资源整合&#xff0…

SSE 和 WebSocket 的区别与选择指南

在构建现代网络应用时&#xff0c;实时通信技术扮演着至关重要的角色。本文将深入讨论 Server-Sent Events (SSE) 和 WebSocket ——两种主要的实时通信技术&#xff0c;对比它们的实现方式、优势和具体用途&#xff0c;以帮助开发人员根据自身项目需求选择合适的技术。 何为 …