QT(概述、基础函数、界面类、信号和槽)

一、概述

1、QT

QT是一个c++的第三方库,是专门用来进行界面编程的一个库
1. QT本身实现了多种软件:
2. ubuntu系统中所有界面都是QT做的
3. 最新版本的QQ也是QT做的
4. 嵌入式编程中,几乎所有的上位机,都可以使用QT来做
QT本身除了实现了ui界面编程之外,还实现了很多非ui界面编程的功能        
网络通信、蓝牙通信、串口通信、web浏览器显示等等等等
基本上来说,现实生活当中可能需要用到的功能,都能用QT来实现

1、QT的手册怎么查询
在左侧功能栏,点到帮助,将目录改成索引,可以通过搜索栏查找要查找的类

最上面一栏是内容栏,列出了这个类中所包含哪些东西(单击绿色的文字可以跳转到目标)

第二个是类的属性栏,列出了类的基类,头文件等等

2、关于QT的头文件

QT的所有头文件,都会以 Q 开头,后面的所有单体,以驼峰命名法,命名

#include <QDebug>
#include <QApplication>
#include <QLabel>
#include <QWidget>
#include <QLineEdit>
#include <QTextEdit>
#include <QPalette>
#include <QPushButton>

3、关于编译执行后的输出方式

在编辑这一栏,中可以看见项目工程文件,工程文件中有一个和工程文件同名的.pro文件,该文件中的是工程文件的编译和查找方式(就像Makefile)。

在屏幕下方的提示栏输出:

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \main.cpp \HEADERS += \FORMS += \qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

重新弹出终端文本框输出(自带的):

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtSOURCES += main.cpp

二、QT的一些基础的函数

1、qDebug(用来debug)

格式:#include <QDebug>qDebug() << 要输出的目标;
功能:该函数返回一个QT的标准输出流对象
解析:QDebug类型对象,直接将该类型对象理解成 cout 就行了

三、QT界面类

1、QWidget(窗口类)

#include <QWidget>
构造函数:QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
QWidget是一个窗口类
注意:QWidget创建的对象只有一个窗口,不能输入,不能显示文字,一般用于辅助布局QWidget这个窗口类的作用就是用来实现大界面的框架,底盘,用来承载其他各种各样的子界面

2、QLabel(文本框)

#include <QLabel>
构造函数:QLabel(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())QLabel(const QString &text, QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags())
功能:这是一个文本框,只能显示编译的文本,不能通过文本框输入文本
成员方法:1.setText(设置文本内容)2.clear(清空文字)······

3、QLineEdit(行编辑文本框)

#include <QLineEdit>
构造函数:QLineEdit(QWidget *parent = Q_NULLPTR)QLineEdit(const QString &contents, QWidget *parent = Q_NULLPTR)
功能:这是一个行编辑器,可以进行一行的文本编辑
成员方法:1.setText(设置文本内容)2.setPlaceholderText(设置提示文字)3.setEchoMode(设置显示方式)4.setPalette(QPalette pe);(设置成调色板配置的颜色)······

4、QTextEdit(文本编辑文本框)

#include <QTextEdit>
构造函数:QTextEdit(QWidget *parent = Q_NULLPTR)QTextEdit(const QString &text, QWidget *parent = Q_NULLPTR)
成员方法:1.setText(设置文本内容)2.append(换行并追加文字)3.setPlaceholderText(设置提示文字)4.setEchoMode(设置显示方式)5.setPalette(QPalette pe);(设置成调色板配置的颜色)······

5、QPalette(调色板)

#include <QPalette>
构造函数:(还有的其他的构造函数可以自己查找)QPalette()QPalette(const QColor &button)
成员方法:1.setColor(设置调色板的颜色)······

6、对象树

对象树是QT的核心机制之一
QT中绝大多数的类都继承自一个基类QObject,继承自同一个基类的好处是方便多态
QObject有一个重要的分支派生类:QWidget,结构图如下

7、父子对象,父子组件

1)父子组件的关系

在对象树中,在此继承关系下,所有的刺激组件都可以将他的上一级或同级的对象,设为父组件

多个子窗口设置同一个窗口为父组件,组成父子组件后,有以下优点:

父子组件是一个整体,子组件是父组件的一部分,父组件的显示、关闭、移动操作,子组件也会同步执行。
由于子组件是父组件的一部分,所以子组件的生命周期由父组件自动管理,当父组件析构时,父组件也会自动调用子组件的析构函数。

2)如何设置父子组件

Qobject的所有派生类中都有一个默认参叫做parent,就比如下图的这些构造函数,在构造对象时传入具体的窗口对象,就可以将其设置为自己的父组件。

如下图,就可以将qw设置为ql的父组件。

8、QBoxLayout(布局类)

布局类有两个派生类:

分别是:QHBoxLayout(水平派生类)和 QVBoxLayout(垂直派生类)

1)QHBoxLayout(水平派生类)

#include <QHBoxLayout>
构造函数:QHBoxLayout(QWidget *parent)
成员函数:addWidget(添加组件到布局中)

2)QVBoxLayout(垂直派生类)

#include <QVBoxLayout>
构造函数:QVBoxLayout(QWidget *parent)
成员函数:addWidget(添加组件到布局中)

3)setLayout(设置窗口的布局)

#include <QWidget>
void QWidget::setLayout(QLayout *layout)

练习:发送消息界面

四、信号和槽

1、信号

当一个组件发生人为操作 、状态发生改变的时候,就会发出一个对应的信号,用来通知外部,当前组件发生了什么

为什么要通知外部当前组件发生了什么:被通知的外部,一旦捕获到信号,就可以做出对应的处理

例如:

点击按钮 >> 按钮发出clicked信号 >> 外部捕获clicked信号 >> 做出对应操作(如发送消息,关闭窗口等操作)

QT中的信号可以携带参数:

目的在于:通知外部当前组件发生了什么操作的时候,还可以通过参数的形式,将一些必要的数据发送给外部

2、槽

用来处理信号的一个函数

当外部 或者 特定组件,捕获到信号之后,就会调用对应的槽函数,来处理该信号

点击按钮 >> 按钮发出clicked信号 >> 外部捕获clicked信号 >> 做出对应操作,这里对应的操作,其实就是槽函本身

由槽函数来实现对应的操作

QT中的槽函数由2个特点:

槽函数允许用户直接手动调用,这个时候,槽函数的参数,直接由用户手动传入即可
槽函数同时允许通过信号函数触发,这个时候,槽函数的参数来自于信号的参数,即信号发出的同时,通过参数发出了一组数据,该数据由对应的槽函数的参数接受

3、connect(关联信号和槽)

QObject::connect(发出信号的组件的地址,信号函数指针,接受信号的组件地址,槽函数指针)
功能:将指定的信号和指定的槽关联,当发出信号后,就执行槽函数
参数:发出信号的组件的地址:组件地址信号函数指针:&信号所属的类名::信号函数名接受信号的组件地址槽函数指针: &槽函数所属的类名::槽函数名

4、信号和槽的可关联性

就是信号和槽之间的关联需要满足一个的条件:

如果槽函数有一个形参,那么与之关联的信号就必须在相同位置传递一个实参;
如果信号有一个实参要传递,但是槽函数没有形参接收则没关系。

5、自定义信号和槽

1)自定义槽函数

我们可以给自定义的窗口写自定义槽函数

自定义槽函数可以写在 public 中,也可以写在 public slots 中,写在 public slots 中更规范

2)自定义信号

必须写在访问限制符 signals 下
自定义信号只需要声明不需要定义

3)如何触发自定义信号

调用信号函数:emit 信号函数名();
注意,如果使用了自定义信号,需要满足以下3个要求1.使用自定义信号的类,必须直接或者间接的继承自 QObject,也就是这个类必须是对象树中的成员之一2.必须在使用了自定义信号的类的一开头,写上一个关键    Q_OBJECT3.使用自定义信号的类,必须分文件写法,不能和 main 在同一个文件中

6、connect的多种使用方式

1)关联某个对象的信号和槽

QObject::connect(btn,&QPushButton::clicked,this,&Widget::myslot);

2)将某个对象的信号与lambda

QObject::connect(ui->pushButton,&QPushButton::clicked,[=](){QString str = ui->lineEdit->text();ui->textEdit->append(str);ui->lineEdit->clear();
});一般说,这是我们最经常使用的方法
因为 lambda表达式能够捕获父作用域中所有内容:包括ui以及其他的私有成员
非常好用

3)将某个对象的信号与关联函数关联

void func(){qDebug() << "hello world";
}QObject::connect(ui->pushButton,&QPushButton::clicked,func);
一般来说,我们很少让一个信号关联到全局函数
因为全局函数无法访问ui

4)将对象的信号关联到另一个信号

QObject::connect(ui->pushButton_2,&QPushButton::clicked,ui->pushButton,&QPushButton::clicked);
由一个信号触发另一个信号
这个也很好用,但是目前来说用不上

7、转到槽功能

转到槽功能,会自动生产一个与目标组件,所选择的信号关联好的槽函数。
转到槽有局限性:只有ui界面里面的组件能够使用转到槽,ui界面中不能显示的窗口无法使用转到槽。

1. 双击 .ui 文件

2. 绘制界面

3. 转到槽(在Widget文件中添加槽函数)

4. 添加的槽函数

练习:发送消息

基于发送消息界面的练习,制作发送消息的显示,点击 "发送" 按钮之后,将le中的文字,同步到te上去,
并且删除le中的文字点击 "发送" 按钮后,触发按钮的 clicked 信号
1:获取并记录lineEdit的文字
2:将记录的文字设置到textEdit上面去
3:清空lineEdit上的文字

1)Widget类文件

2)main函数文件

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

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

相关文章

【从零开始java学习|第六篇】运算符的使用与注意事项

目录 一、算术运算符 1. 基本算术运算符&#xff08;二元&#xff09; 2. 自增 / 自减运算符&#xff08;一元&#xff09; 二、类型转换&#xff08;隐式与强制&#xff09; 1. 隐式转换&#xff08;自动类型转换&#xff09; ​编辑 2. 强制转换&#xff08;显式类型转…

shellgpt

一、介绍 官网&#xff1a;https://github.com/TheR1D/shell_gpt ShellGPT&#xff08;shell_gpt&#xff09; 是一款把 GPT 系列大模型能力直接搬到终端 的开源命令行生产力工具。用日常英语或中文描述需求&#xff0c;就能帮你 生成、解释甚至自动执行 Shell 命令&#xff…

geoserver sql视图调用Postgis自定义函数问题记录

一、问题描述&#xff1a;geoserver sql视图调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID加了2&#xff0c;但表中数据只增加一条记录。 但在pgAdmin中直接写SQL调用Postgis自定义函数对点图层增加一条记录时&#xff0c;返回结果主键自增ID只加…

#T1224. 最大子矩阵

题目传送 题目描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵&#xff0c;你的任务是找到最大的非空(大小至少是11)子矩阵。 比如&#xff0c;如下44的矩阵 0 -2 -7 09 2 -6 2 -4 1 -4 1-1 8 0 -2的最大子矩阵是 9 2-4 1-1 8这…

2025年大模型安全岗的面试汇总(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 1. Transformer核心机制及其对LLM突破的基石作用 2. LLM能力边界评估框架设计 3. 模型层级安全风险分析 …

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号解读

《关于省级政务云服务费支出预算标准的规定》豫财预〔2024〕106号文件由河南省财政厅编制经省政府同意后于2024年12月3日印发执行&#xff0c;规定作为省级政务云服务费支出预算编制和审核的依据&#xff0c;旨在加强省级部门预算管理&#xff0c;规范政务云服务费支出预算编制…

使用HalconDotNet实现异步多相机采集与实时处理

文章目录 一、核心功能与原理 功能目标: 工作原理: 关键机制: 二、完整C#实现代码 三、关键实现解析 1. 零拷贝图像传输 2. 动态帧率控制 3. HALCON并行优化 4. 异常隔离机制 四、高级优化策略 1. 硬件加速配置 2. 内存池管理 3. 实时性保障 一、核心功能与原理 功能目标:…

《疯狂Java讲义(第3版)》学习笔记ch4

ch4流程控制与数组1.switch语句后的expression表达式的数据类型只能是byte、short、char、int四种证书类型。2.建议不要在循环体内修改循环变量&#xff08;也叫循环计数器&#xff09;的值&#xff0c;否则会增加程序出错的可能性。3.定义数组推荐语法格式&#xff1a;type[] …

COLMAP进行密集重建,三维重建的步骤

密集重建是在稀疏重建的基础上进行的 稀疏重建见&#xff1a;用 COLMAP GUI 在 Windows 下一步步完成 相机位姿估计&#xff08;SfM&#xff09; 和 稀疏点云重建的详细步骤&#xff1a;_colmap database导入图片位姿-CSDN博客 完成稀疏重建后直接进入以下步骤进行密集重建&am…

基于飞算JavaAI实现Reactor模式服务器的深度实践

一、飞算JavaAI技术概述 1.1 飞算JavaAI平台简介飞算JavaAI是飞算科技推出的智能化Java开发平台&#xff0c;通过AI技术赋能传统软件开发流程&#xff0c;为开发者提供从需求分析到代码实现的全流程智能化解决方案。该平台深度融合了人工智能技术与软件开发实践&#xff0c;具备…

量子人工智能

量子人工智能&#xff08;QAI&#xff09;是量子计算与人工智能的强大融合。这一领域旨在将量子系统独特的计算能力与人工智能的模式识别和学习能力相结合&#xff0c;以更快、更高效地解决问题。 量子人工智能与常规人工智能的区别是什么&#xff1f;常规人工智能在经典计算机…

算法题Day1

1. 练习1&#xff1a;Hello,World!解题步骤:using namespace std; int main() {cout<<"Hello,World!"<<endl;return 0; }2. 练习2&#xff1a;打印飞机解题步骤:#include <iostream> using namespace std; int main() {cout << " …

Cypher注入详解:原理、类型与测试方法

Cypher&#xff0c;全称为 (Open) Cypher Query Language&#xff0c;是一种专为图数据库设计的声明式查询语言。它以直观的模式匹配方式&#xff0c;帮助开发者和数据分析师从复杂的图结构数据中检索、创建和修改信息。如果说 SQL 是关系型数据库的语言&#xff0c;那么 Cyphe…

PG靶机 - Pelican

一、 初步侦察与服务探测 1.1 端口扫描与服务识别 首先&#xff0c;对目标主机 192.168.163.98 进行全面的端口扫描&#xff0c;以识别所有开放的服务。 sudo nmap 192.168.163.98 -p- --min-rate5000 -A图 1: Nmap 扫描结果&#xff0c;显示多个开放端口 扫描结果表明&#xf…

【1】Transformers快速入门:自然语言处理(NLP)是啥?

第一章&#xff1a;自然语言处理&#xff08;NLP&#xff09;是啥&#xff1f;一句话解释&#xff1a; NLP 教电脑听懂人话、说人话的技术 &#xff08;比如让手机听懂你说话、让翻译软件变聪明&#xff09;NLP发展史&#xff1a;电脑学人话的 “翻车史” 第一阶段&#xff08…

微软发布五大AI Agent设计模式 推动企业自动化革新

今日&#xff0c;微软在官网正式公布了企业级AI智能体&#xff08;Agent&#xff09;的五大核心设计模式&#xff0c;旨在通过模块化架构与自适应能力&#xff0c;帮助企业构建具备推理、协作与自主进化能力的"数字员工团队"。这一技术框架突破传统RPA&#xff08;机…

如何根据本地是有GPU安装对应CUDA版本的PyTorch

要在本地安装与您的NVIDIA GPU匹配的CUDA版本PyTorch&#xff0c;请按以下步骤操作&#xff1a; 步骤1&#xff1a;确定GPU型号和驱动信息 1.按 Win X选择 ​设备管理器​2.展开 ​显示适配器​ → 记录您的NVIDIA显卡型号&#xff08;如RTX 3060&#xff09;3.打开命令提示…

在FP32输入上计算前向传播需要多长时间?FP16模型的实例与之前的模型相比,它快了多少?

下面的 MixedModel 类使用作为参数提供的数据类型创建了一个非常简单的两层模型: class MixedModel(nn.Module): def init (self, dtype): super(). init

嵌入式硬件中MOS管图形详解

第一:MOS管电子元器件分析 MOS管全称叫金属氧化物半导体场效应晶体管,是一种压控器件。 MOS管属于场效应晶体管。 1、进入饱和区,若想加大电流该怎么做? 答:增加栅极电压,以扩大沟道宽度,此时到沟道再次被夹断所通过的电流也会增大。 2、MOS管的特性 答:(1)MOS管…

介绍java中atomic及相关类

文章目录一、Atomic 类的核心原理二、常见 Atomic 类及用法1. 基本类型原子类&#xff08;1&#xff09;AtomicInteger&#xff08;原子更新 int&#xff09;&#xff08;2&#xff09;AtomicLong&#xff08;原子更新 long&#xff09;&#xff08;3&#xff09;AtomicBoolean…