Qt学习之Qt基础入门(上)

article/2025/10/25 0:55:55

1. 前言

上一篇博客,简单的介绍了一下C++的面向对象编程,这篇博客就主要是用来入门Qt,废话不多说,开干!

Qt入门系列:
Qt学习之C++基础
Qt学习之Qt安装
Qt学习之Qt基础入门(上)
Qt学习之Qt基础入门(中)
Qt学习之Qt基础入门(下)

本文原创,创作不易,转载请注明!!!
本文链接
个人博客:https://ronglin.fun/?p=217
PDF链接:见博客网站
CSDN: https://blog.csdn.net/RongLin02/article/details/120595809

2. 总述

Qt的学习过程我自己是,先观看视频,二倍速速刷快速过一遍大概的知识,然后就是给自己的提一个需求,然后用Qt完成项目
学习视频:最新QT从入门到实战完整版|传智教育
这个视频讲的很好,有很多常用方法,快速入门很合适。
然后做的前期小小小项目就是 写一个 基于Qt的串口调试助手

以下内容均只用来学习,大部分内容来自视频!
本博客内容原创,编辑不易,转载请注明!!!

3. 准备工作

3.1. Qt的安装

有关于Qt的安装可以看这个博客,比较详细,比较适合小白,如果是大佬的话,直接去官网下下载,然后下一步下一步安装就行了。
QT5.11下载与安装教程
在windows也没什么需要注意的,注意安装的时候中间有一步需要添加库,注意添加只需要的库就行了。

3.2. Qt的优点

首先Qt是一个跨平台图形界面引擎,适用于Windows也适用于Linux,我做的项目就是在两个系统下的一个小工具,当时也考虑过用Java,但是由于第二个设备的配置较低,造成软件性能不足,延迟不可接受,最后选择了用Qt开发。
同时,Qt相对于C++,有一个很好的机制是,他有自己的一套内存回收机制,在一定程度上简化了内存回收,不需要每每new申请之后总要想着delete了,同时Qt也有很多成功开发的案例,例如Linux桌面环境 KDE就是用Qt开发的。

3.3. 基础知识

3.3.1. Qt的坐标系

左上角为0,0 点
x以右为正方向
y以下为正方向
和我们平时的数学直角坐标系不太一样

3.3.2. 对象树

当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放入到对象树中,回收的时候一并回收,一定程度上简化了内存回收机制
在这里插入图片描述

3.3.3. 常用快捷键

命名规范
类名:首字母大写,单词和单词之间首字母大写
函数名:变量名称 首字母小写,单词和单词之间首字母大写

快捷键
注释 ctrl + /
运行 ctrl + r
编译 ctrl + b
字体缩放 ctrl + 鼠标滚轮
查找 ctrl + f
整行移动 ctrl + shift + ↑ 或者↓
帮助文档 F1
自动对齐 ctrl +i
同名之间的.h 和 .cpp切换 F4
帮助文档 第一种方式 F1

4. 创建项目

4.1. 创建一个新得项目

左上角文件,点击新建,然后会弹出来这个界面
在这里插入图片描述
这个界面,左侧是选择新建的是工程还是单个文件,单个文件一般都是新建一个类或者新建一个ui界面等等用到, 我们新建一个工程,选择Application,然后中间的是选择样式,第一个是窗口程序,第二个是控制台程序,我们新建一个窗口程序。
选择完毕之后,输入项目名称,注意名称不能有中文,不能有空格,然后确定路径,注意路径不能有中文路径。
然后一直下一步,到这个界面.
在这里插入图片描述
默认创建的窗口类是QMainWindow,可以选择的基类有: QWidget 、QMainWindow、QDialog,一个是单一的窗口,一个是主界面,一个是对话框,MainWindow比Widget多了一些常用的控件,例如菜单栏之类的。

4.2. 文件目录

在这里插入图片描述
一个工程创建完成之后,会默认生成这些文件,分别简单说明

4.2.1. .pro文件

pro文件相当于一个配置清单

QT       += core gui   Qt包含的模块greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  //大于4版本以上 包含 widget模块TARGET = MyTest  //目标   生成的.exe程序的名称
TEMPLATE = app       	  //模板   应用程序模板  ApplicationSOURCES += \                //源文件main.cpp \mainwindow.cppHEADERS += \                //头文件mainwindow.hFORMS += \                    //ui文件界面mainwindow.ui

4.2.2. main.cpp

    QApplication a(argc, argv);    //应用程序对象,有且仅有一个MainWindow w;    //实例化窗口对象w.show();    //调用show函数 显示窗口return a.exec();    //让应用程序对象进入消息循环机制中,代码阻塞到当前行

4.2.3. mainwindow.cpp

这个就是用来书写逻辑代码的主要地方,和mainwindow.h是一起的

4.2.4. mainwindow.ui

ui文件,可视化界面拖动,可以做界面布局,很方便

5. API

学习一门语言,要经常查他的API文档,Qt的API文档写的十分详细了,两种方法:

5.1. 内嵌帮助

第一个是点击左侧的帮助按钮,然后在上边选择查找,就可以查询自己的想知道的类的用法了。
在这里插入图片描述

5.2. Qt助手

第二个是在.....\Qt5.9.5\5.9.5\mingw53_32\bin目录下
在这里插入图片描述
这个方法的好处是,和开发工具是分离的,不用在开发工具中一直切换界面,以便查询。

6. 信号和槽

信号和槽是Qt的一个特色,当一个类运行的时候,调用信号,就会触发相应的槽函数,同时信号函数还可以传递参数给槽函数。

6.1. 用法

连接函数 :connect(参数1,参数2,参数3,参数4)
参数1 信号的发送者
参数2 发送的信号(函数地址)
参数3 信号的接受者
参数4 处理的槽函数 (函数的地址)

//实现点击按钮 关闭窗口的案例
connect(btn , &QPushButton::click,this,&QWidget::close );

6.2. 自定义信号与槽函数

有的时候,只用类自带的信号与槽比较局限,我们还可以用自己定义的信号和槽函数
自定义信号
自定义的信号要写到头文件下的 signals下,有时候项目没自动生成,自己写上,返回值为void,只需要声明,不需要实现。
可以有参数,同时也可以重载
自定义槽函数
自定义的槽函数,返回值为void,需要声明 ,也需要实现,可以有参数 ,可以重载,要写在头文件下的 public slot下 或者public 或者全局函数

6.2.1. 代码

直接看代码实现吧
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{Q_OBJECT
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();
private:Ui::MainWindow *ui;
signals:    //信号void print(QString str);
public slots:    //槽函数void onClicked();void printString(QString str);
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::onClicked);connect(this,&MainWindow::print,this,&MainWindow::printString);
}
void MainWindow::onClicked()
{if(ui->pushButton->text() == "Hello,World"){ui->pushButton->setText("一个普通的按钮");}else{ui->pushButton->setText("Hello,World");emit this->print("Hello,World");}
}
void MainWindow::printString(QString str)
{qDebug()<<"要打印的字符串是:"<<str;
}
MainWindow::~MainWindow()
{delete ui;
}

mainwindow.ui
在ui界面,直接拖拽一个pushButton到主界面中。

在这里插入图片描述

实现的功能是,点击按钮,按钮名称在一个普通的按钮Hello,World之前转化,同时当名称是Hello,World时,控制台打印一次Hello,World

同时简单的解释以下:
这句代码,是将按钮点击事件和onClicked函数绑定在一起

connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::onClicked);

这句代码,是将类中的print信号和类中的槽函数printString绑定在一起

connect(this,&MainWindow::print,this,&MainWindow::printString);

调用的时候,用emit this->print("Hello,World");就可以实现,触发void printString(QString str)函数
用起来还是很方便的。

6.3. 扩展

6.3.1. 重载

信号和槽都是可以重载的,重载用法比较繁琐复杂。
当自定义信号和槽出现重载时,需要利用函数指针 明确指向函数的地址,来告诉编译器,到底连接的是哪一个。
例如:

void( Teacher:: * tSignal )( QString ) = &Teacher::hungry;

小tips
当需要将QString转化为char *时,
先用ToUtf8()方法将其转化为QByteArray,然后再用Data()转为Char *
例如:

String str("0123456789");
char* p = str.toUtf8().data();
qDebug()<<p[1];    //输出 1

6.3.2. 其他

如果需要断开连接的话,需要用到disconnect函数
同时,一个信号也可以连接另一个信号,一个信号可以连接多个槽函数,多个信号可以连接同一个槽函数
信号和槽函数的参数 必须类型一一对应,但是 信号的参数个数 可以多于槽函数的参数个数

6.3.3. Qt4版本写法

 connect( 信号的发送者,发送的信号SIGNAL(信号),信号接受者,槽函数SLOT(槽函数))

优点是参数比较直观
缺点是编译器不会检测参数类型

6.4. Lambda表达式

Lambda表达式匿名函数的简便写法,如果想要深入了解,可以自行查询。
这里只是提供用法

connect(ui->pushButton,&QPushButton::clicked,[=](){ui->pushButton->setText("Hello,World");});

[]是匿名函数
[=] 是值传递
[&] 是引用传递
()是参数
{}是实现体

6.5. 一览图总结

在这里插入图片描述

7. 总结

根据视频,这是第一天的学习任务,主要是熟悉Qt语法和Qt的基本知识。
未完待续 =w=


http://chatgpt.dhexx.cn/article/pDeDL8ql.shtml

相关文章

qt基础入门教程

1、t的介绍、优点、成功案例 5.8.0 Qt是一个跨平台的C图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。爸是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组件编程。 推荐安装 wps linux 桌面环境 虚拟机软件 屏幕共…

Qt入门教程100篇(已完结)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「CSDN学院」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;Qt基础教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&…

QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …

QT入门到实战学习笔记

学习笔记 最新QT从入门到实战完整版|传智教育_哔哩哔哩_bilibili 目录 1.创建一个QT文件 1.1命名规范 1.2快捷键 2QPushButton创建 2.1防止汉语乱码 2.2对象树 2.3Qt窗口坐标体系 3信号和槽机制 3.1自定义信号和槽 3.1.1自定义信号&#xff1a; 3.1.2自定义槽&#…

pdflatex和xelatex的使用差别和建议

关于pdflatex和xelatex的区别的一些注意点 pdflatex 和xelatex分别是什么我遇到的一些问题 pdflatex 和xelatex分别是什么 pdflatex 和xelatex是latex编译中最常用的编译方式&#xff0c;而且效果一般都是比较好的。 PDFLaTeX命令&#xff1a;PDFTeX程序中的命令&#xff0c;用…

关于MAC解决jupyter中出现nbconvert failed/ xelatex not found on path报错

前言 开开心心的花了半个小时做完了2303的期中测试&#xff0c;结果在导出为pdf的时候提示我500错误&#xff0c;说明为nbconvert failed: xelatex not found on path&#xff0c;我当时就蒙了昂&#xff0c;不过还好考试时间是三个小时&#xff0c;还能浪浪&#xff0c;但是我…

【LaTex使用总结】LaTex,pdflatex,xelatex,xetex等的区别和关系

问题是这样产生的&#xff0c;从本科毕设开始接触LaTex起&#xff0c;使用现成的模板进行编译生成操作&#xff0c;一步步按指示操作也从未深究。 后来使用word较多&#xff0c;LaTex经常是简单模板&#xff0c;也渐渐对LaTex的细节不再感兴趣&#xff0c;近期又开始用LaTex撰写…

pyplot 使用 latex 报错:xelatex not found……

错误提示 发生异常: RuntimeError xelatex not found. Install it or change rcParams[pgf.texsystem] to an available TeX implementation. 原始参数&#xff1a; plt.rcParams.update({"pgf.texsystem": "xelatex","text.usetex": True,# u…

Winedt为什么可以用pdfLaTex编译中文(pdfLaTex和XeLaTex的使用)

文章目录 Winedt为什么可以用pdfLaTex编译中文查看Winedt的默认编译器&#xff1a; 1.XeLaTex和pdfLaTex的关系2.Winedt中使用pdfLaTex编译中文的tex3.原因4.验证 Winedt为什么可以用pdfLaTex编译中文 前言&#xff1a;如果你只是想用Winedt实现LaTex中英混排那么可以直接选择…

recipe terminated with fatal error: spawn xelatex enoent.

vscode配置latex的小问题 问题产生的原因是环境变量没有配置好。所以只需要把环境变量配置好就可以了。 1、 打开textlive安装的路径&#xff08;…\textlive\2022\bin\win32&#xff09;&#xff0c;比如我的就是C:\texlive\2022\bin\win32 2、编辑环境变量&#xff1a; 编…

TeXstudio报错: fwrite: Broken pipe xelatex.exe

错误&#xff1a; 解决方法&#xff1a; 选项->设置TeXstudio 默认编译器换成PdfLaTex&#xff1a; 问题解决。

CTEX编译Xelatex以及如何更新Miktex

1.现在很多科研人员都喜欢用latex来写文章&#xff0c;主要是latex有了模板之后排版较简单&#xff0c;而且参考文献比较容易生成&#xff0c;不需要再去排版。本人自己比较喜欢使用CTEX&#xff0c;这个得看个人习惯使用吧。有很多同胞在使用CTEX 时可能会遇到无法编译Xelatex…

linux下latex使用教程,LaTeX使用--XeLaTeX入门基础(二)

主机平台&#xff1a;Gentoo Linux 11.2 内核版本&#xff1a;Linux Kernel 3.2.1 编译环境&#xff1a;XeTeX 3.1415926-2.3-0.9997.5 (TeX Live 2011) 相关阅读 主机平台&#xff1a;Gentoo Linux 11.2 内核版本&#xff1a;Linux Kernel 3.2.1 编译环境&#xff1a;XeTeX 3.…

TeXworks 设置成默认用XeLaTeX排版

TeXworks 设置成默认用XeLaTeX排版 在用Texlive2020中,自身自带的编辑器每次都是默认以pdfLaTeX的方式进行排版 因为pdfLaTex在排版中文的时候容易乱码和报错, 用XeLaTeX排版就不会,为了方便就将它设置为一打开编辑器就是以XeLaTeX 方式排版 一打开就是这样子 首先在编辑器页面…

解决XeLaTex编译后中文出现乱码的问题

最近想用LaTex做简历&#xff0c;但是在做中文简历的时候&#xff0c;出现乱码的情况&#xff0c;网上查了很多解决方法&#xff0c;最后成功解决了&#xff0c;在这里总结分享一下。 先建立一个tex文件&#xff0c;输入一下格式的文件&#xff0c;注意加入\usepackage{CTEX} …

Latex、XeLatex无法加粗

XeLaTeX是新的Unicode版本&#xff0c;内建支持Unicode(UTF-8)&#xff0c;可以调用操作系统的字体。但是在使用的时候也可能会出现许多问题&#xff0c;例如我最近使用的时候字体就一直无法显示粗体&#xff0c;但是运行的时候不报错。 原因有可能是你的系统里面缺少模板指定…

配置中文XeLaTex环境

本人初始时懒人一键使用了CTex安装&#xff0c;但无奈写中文论文时版本太低不支持使用的模板&#xff0c;所以开始自行配置TexLiveWinEdtSumatraPDF的环境。【TeXworks个人觉得真的不太好用 其中使用TexLive时遇到的一些问题及解决方案如下&#xff1a; fontspec.cfg: Erroneo…

VSCode Latex Workshop 设置 XeLatex 编译

前言 VSCode LatexWorkshop 是非常方便的组合&#xff0c;而对于中文文档&#xff0c;pdfLatex 引擎的支持很差&#xff0c;很多时候需要使用 XeLatex 引擎编译&#xff0c;但是总是莫名其妙各种报错。用下面的 magic 语句也无济于事。 % !TEX program xelatex 本篇介绍通…

overleaf 改为XeLatex怎么操作

文章目录 overleaf 改为XeLatex怎么操作 overleaf 改为XeLatex怎么操作 想将overleaf中的编译器改为XeLatex&#xff0c;搜索后也没有发现太好的回答&#xff0c;解决方法如下 点击菜单选项&#xff0c;然后就可以对overleaf进行设置了 效果如下&#xff1a;

XeLaTeX: 支持现代字体 LaTeX 编译器

XeLaTeX: 支持现代字体 LaTeX 编译器 原  文&#xff1a;XeLaTeX 译  者&#xff1a;Xovee 翻译时间&#xff1a;2023年2月21日 文章目录 XeLaTeX: 支持现代字体 LaTeX 编译器介绍基础&#xff1a;Times New Roman为不同的LaTeX模块设置不同的字体Overleaf中的字体安装在O…