QT基础篇(1)QT概述

1.什么是QT

QT是一个跨平台的C++应用程序开发框架。它提供了一套丰富的图形用户界面(GUI)和多媒体功能,可以用于开发各种类型的应用程序,包括桌面应用程序、移动应用程序和嵌入式系统。QT具有易于使用、可定制性强、性能高等特点,因此被广泛应用于软件开发领域。

2.QT安装

QT的安装比较简单

大家可以从官网直接下载最新版的QT(官网很慢)(Https://www.qt.io)(吐槽,打开都得半天)

大家也可以私信我一下,我会吧资源发给大家

windows和虚拟机的都有(我这的是QT5.12长期稳定版)

之后就是按步骤一直安装就行了(组件那里看自己需要安装,一般建议全部安装(要不然那个组件缺少了后期寻找,添加挺麻烦的))

3.QT开发步骤及实例

QT是一个跨平台的应用程序框架,提供了丰富的GUI(图形用户界面)和功能的开发工具。下面是QT开发的基本步骤及一个实例:

步骤1:安装QT 首先,从QT官方网站(https://www.qt.io/)下载并安装QT。在安装过程中,可以选择安装不同的组件和工具,根据自己的需要进行选择。

步骤2:创建新项目 打开QT Creator软件,点击“新建项目”,选择“QT Widgets应用程序”模板。在项目设置中,可以选择项目名称、目录,以及其他配置选项。

步骤3:设计界面 在QT Creator中,使用“设计”模式,可以通过拖拽控件(如按钮、文本框等)来设计界面。在界面设计中,可以设置控件的属性、布局等。

步骤4:编写代码 在QT Creator中,使用“编辑”模式,可以编写与界面交互的代码。可以在界面加载时进行初始化操作,通过信号与槽机制来实现事件的处理。

步骤5:构建和运行 在QT Creator中,点击“构建”按钮来编译项目。编译成功后,可以点击“运行”按钮来运行项目。可以选择在不同的平台上进行运行和调试。

实例:一个label里输出hello world

运行结果:

这只是最基础的应用

大家经过学习可以做出这样

样式表全靠大家自己调;

4.相关概念解析

伙伴编辑模式

QT中的伙伴编辑模式是一种可以改进用户界面设计的功能。在伙伴编辑模式下,用户可以选择一个控件作为另一个控件的伙伴,使得两个控件的布局关系更加灵活和准确。

伙伴编辑模式可以通过菜单栏的“编辑”选项或者快捷键进入。进入伙伴编辑模式后,用户可以通过鼠标点击来选择和移动控件,并将其与其他控件进行对齐或者分离。用户还可以通过键盘的方向键来微调控件的位置。

在伙伴编辑模式下,用户可以更精确地设置控件的位置和布局,以达到更好的用户界面效果。这对于设计复杂的界面或者需要特定布局的界面非常有用。同时,伙伴编辑模式还可以减少用户操作的复杂性和错误,提高用户体验。

总之,伙伴编辑模式是QT中一种用于改进用户界面设计的工具,通过选择和移动控件来调整它们的布局关系,以使界面更灵活、准确和易用。

信号与槽机制(最重要)

QT的信号与槽机制是一种用于对象间通信的机制,它允许一个对象发送信号,另一个对象接收信号并执行相应的槽函数。

在QT中,信号是在特定事件发生时被触发的。例如,按钮被点击、文本框内容改变等事件。每个对象都可以定义自己的信号,当特定事件发生时,通过emit关键字发送信号。

槽是对象中的成员函数,用于处理信号。一个对象可以有多个槽函数,每个槽函数都可以处理不同的信号。

通过使用connect()函数,可以将信号与槽函数进行连接。这样,当信号被触发时,相应的槽函数会被调用执行。

以下是一个简单的示例:

#include <QObject>
#include <QPushButton>class MyObject : public QObject
{Q_OBJECTpublic slots:void mySlot(){qDebug() << "mySlot called";}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);MyObject obj;QPushButton button("Click me");QObject::connect(&button, &QPushButton::clicked, &obj, &MyObject::mySlot);button.show();return app.exec();
}

在上面的示例中,我们定义了一个继承自QObject的MyObject类,其中包含了一个槽函数mySlot。我们还创建了一个QPushButton对象button,并将其clicked信号连接到了MyObject对象的mySlot槽函数上。

当点击按钮时,按钮的clicked信号会被触发,槽函数mySlot会被调用,并输出"mySlot called"。

通过信号与槽机制,我们可以实现对象间的松耦合,使得程序结构更加清晰和易于维护。同时,QT的信号与槽机制还支持跨线程通信,使得多线程编程变得简单和安全。

这里简单提一下,之后在细说这种机制的优缺点

QT5元对象系统

QT5中的元对象系统是QT的核心机制之一,它提供了一种在运行时获取对象信息和动态操作对象的能力。元对象系统是通过元对象来实现的,每个QObject派生类在编译时都会自动生成一个对应的元对象。

元对象是一个描述QObject派生类的结构信息的数据结构,它包含了类名、父类名、成员函数、信号与槽等信息。通过元对象系统,我们可以在运行时查询和操作元对象。

元对象系统提供了几个重要的宏和函数来使用元对象,包括:

  1. Q_OBJECT宏:在QObject派生类的头文件中使用Q_OBJECT宏来启用元对象系统。这个宏会自动生成元对象的相关代码。

  2. QMetaObject类:用于在运行时查询和操作元对象。可以通过QObject::metaObject()函数获取一个对象的元对象。

  3. QMetaMethod类:用于描述对象的成员函数,可以获取函数的名称、参数列表等信息。可以通过QMetaObject::method()函数获取一个对象的成员函数。

  4. QMetaProperty类:用于描述对象的属性,可以获取属性名称、类型和值等信息。可以通过QMetaObject::property()函数获取一个对象的属性。

通过元对象系统,我们可以实现一些高级功能,如在运行时动态地连接信号与槽、获取对象的属性和方法等。元对象系统为QT提供了强大的反射能力,使得QT成为一个非常灵活的开发框架。

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

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

相关文章

uniapp 制作 wgt 包(用于 app 的热更新)

升级版本号 修改 manifest.json 的配置&#xff0c;应用版本名称和应用版本号 必须高于上一版的值。 制作 wgt 包 发布 wgt 包 打开 uni-admin 项目的升级中心 上传后会自动生成下载链接 app 的静默热更新 发布新版后&#xff0c;用户打开app&#xff0c;后台会自动下载 wgt…

pyenv虚拟环境安装和配合pipenv多版本创建

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、下载配置pyenv二、配置多版本虚拟环境总结 前言 最近公司编写了一个自动化用例编写软件&#xff0c;需要适配win7和win10系统&#xff0c;需要同时编译3.8…

基于SSM+vue的新生报到服务管理系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

C++算法学习心得五.二叉树(4)

1.二叉搜索树中的插入操作&#xff08;701题&#xff09; 题目描述&#xff1a;给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意…

【Python机器学习】SVM——线性模型与非线性特征

SVM&#xff08;核支持向量机&#xff09;是一种监督学习模型&#xff0c;是可以推广到更复杂模型的扩展&#xff0c;这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限&#xff0c;因为线和平面的灵活性有限&#xff0c;但是有一种方式可以让线性模型更加…

Linux系统中的IP地址、主机名、和域名解析

1.IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本&#xff08;V6很少用&#xff0c;暂不涉及&#xff09; IPv4版本的地址格式是&#xff1a;a.b.c.d&#xff0c;其中abcd表示0~255的数字&…

echarts x轴下增加一组数据的实现方法

实现效果&#xff1a; 关键代码 xAxis: [{type: category,axisTick:{show: false},axisLine:{show: false},axisLabel:{align:center,},data: [9-w2, 9-w3, 343,9-w2, 9-w3, 343]},{type: category,name: 排比变化,nameTextStyle: {verticalAlign: "left",padding:[…

迈入AI智能时代!ChatGPT国内版免费AI助手工具 peropure·AI正式上线 一个想法写一首歌?这事AI还真能干!

号外&#xff01;前几天推荐的Peropure.Ai迎来升级&#xff0c;现已支持联网模式&#xff0c;回答更新更准&#xff0c;欢迎注册体验&#xff1a; https://sourl.cn/5T74Hu 相信很多人都有过这样的想法&#xff0c;有没有一首歌能表达自己此时此刻的心情&#xff1a; 当你在深…

虚幻UE 特效-Niagara特效初识

虚幻的Niagara特效系统特别的强大&#xff0c;可以为开发者提供丰富的视觉效果&#xff01; 本篇笔记对Niagara系统进行初步的学习探索 文章目录 前言一、Niagara四大核心组件二、粒子发射器和粒子系统1、粒子发射器的创建2、粒子系统的创建3、Niagara系统的使用 总结 前言 在…

SpringBoot之优化高并发场景下的HttpClient并提升QPS

HttpClient优化思路 使用连接池&#xff08;简单粗暴&#xff09; 长连接优化&#xff08;特殊业务场景&#xff09; httpclient和httpget复用 合理的配置参数&#xff08;最大并发请求数&#xff0c;各种超时时间&#xff0c;重试次数&#xff09; 异步请求优化&#xff0…

个人博客教程(Typora官方免费版)

教程 链接&#xff1a;https://pan.baidu.com/s/1kVk3wxrcAPkIy8VrX7CK7g?pwdigiz 提取码&#xff1a;igiz 其实下面的教程都可以通过右键选择你想要的文本来实现&#xff0c;但是掌握基本的语法可以更快&#xff0c;如果看不懂我写的是什么东西可以查看非常简单的入门教程M…

解密Mybatis-Plus:优雅简化你的数据访问层!

目录 1、引言 2、什么是Mybatis-Plus 3、Mybatis-Plus的特点和优势 4、安装和配置Mybatis-Plus 5、使用Mybatis-Plus进行数据库操作 6、Mybatis-Plus的高级功能 7、Mybatis-Plus的扩展和插件 8、与Spring Boot集成 9、结语 1、引言 Mybatis-Plus是一个强大而优雅的Jav…

科研学习|论文解读——信息世界映射方法

题目&#xff1a;信息世界映射的下一步是什么&#xff1f;在情境中理解信息行为/实践的国际化和多学科方法&#xff08;What is next for information world mapping? International and multidisciplinary approaches to understanding information behaviors/ practices in …

Feature Fusion for Online Mutual KD

paper&#xff1a;Feature Fusion for Online Mutual Knowledge Distillation official implementation&#xff1a;https://github.com/Jangho-Kim/FFL-pytorch 本文的创新点 本文提出了一个名为特征融合学习&#xff08;Feature Fusion Learning, FFL&#xff09;的框架&…

进程的状态

进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。在三态模型 中&#xff0c;进程状态分为三个基本状态&#xff0c;即就绪态&#xff0c;运行态&#xff0c;阻塞态。在五态模型中&#xff0c;进程分为新建态、就绪态&#xff0c;运行态&#x…

井盖异动传感器,守护脚下安全

随着城市化进程的加速&#xff0c;城市基础设施的安全问题日益受到关注。其中&#xff0c;井盖作为城市地下管道的重要入口&#xff0c;其安全问题不容忽视。然而&#xff0c;传统的井盖监控方式往往存在盲区&#xff0c;无法及时发现井盖的异常移动。为此&#xff0c;我们推出…

xtu oj 1329 连分式

题目描述 连分式是形如下面的分式&#xff0c;已知a,b和迭代的次数n&#xff0c;求连分式的值。 输入 第一行是一个整数T(1≤T≤1000)&#xff0c;表示样例的个数。 每行一个样例&#xff0c;为a,b,n(1≤a,b,n≤9) 输出 每行输出一个样例的结果&#xff0c;使用x/y分式表达…

Hive数据定义(2)

hive数据定义是hive的基础知识&#xff0c;所包含的知识点有&#xff1a;数据仓库的创建、数据仓库的查询、数据仓库的修改、数据仓库的删除、表的创建、表的删除、内部表、外部表、分区表、桶表、表的修改、视图。在上一篇文章中介绍了一部分知识点&#xff0c;在本篇文章中将…

Vue2.脚手架

全局安装&#xff1a;npm i vue/cli -g检查是否成功安装&#xff1a;vue --version新建项目&#xff1a;vue create 项目名 通过nodejs安装的时候&#xff0c;可以直接代理和仓库&#xff0c;~/.npmrc文件内容如下&#xff1a; proxysocks5://127.0.0.1:7897 registryhttps:/…

Kafka的核心原理

Topic的分区和副本机制 分区有什么用呢? 作用&#xff1a; 1- 避免单台服务器容量的限制: 每台服务器的磁盘存储空间是有上限。Topic分成多个Partition分区&#xff0c;可以避免单个Partition的数据大小过大&#xff0c;导致服务器无法存储。利用多台服务器的存储能力&#…