Qt学习之Qt基础入门(上)
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=
Qt学习之Qt基础入门(上)相关推荐
- Qt学习之Qt基础入门(下)
1. 前言 前两篇博客简单的阐述了一下Qt的入门用法,这篇博客继续跟着视频学习. Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门(中) ...
- Qt学习之Qt基础入门(中)
1. 前言 上一篇博客,总结了Qt的一些基础用法,这篇博客继续跟视频学习Qt的常用方法 Qt入门系列: Qt学习之C++基础 Qt学习之Qt安装 Qt学习之Qt基础入门(上) Qt学习之Qt基础入门( ...
- 视频教程-人人都会深度学习之Tensorflow基础入门-深度学习
人人都会深度学习之Tensorflow基础入门 大数据工程师/算法工程师/大数据讲师,毕业于西华大学软件工程专业.在大数据领域有着丰富的实战经验. 擅长领域:Spark/Hadoop.算法设计及系统架 ...
- 1、Latex学习笔记之基础入门篇
目录 一.Latex基础 1.架构 2.引用.脚注 3.单栏.双栏 4.常用快捷键 5.宏包 6.空格 7.换行.行间距 8.换段 9.下划线 10.引号 11.注释 12.字体 13.缩进 14.超 ...
- java基本语法心得_Java学习笔记(一)——基础语法(上)
Java学习笔记(一)--基础语法(上) 软件构造 写在前面 编写Java程序时,应注意以下几点:大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的 ...
- 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)
阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...
- Spark大数据开发学习:Spark基础入门
在诸多的大数据技术框架当中,Spark可以说是占据了非常重要的地位,继Hadoop之后,基于实时数据处理需求的不断上升,Spark开始占据越来越大的市场份额,而Spark,也成为大数据的必学知识点.今 ...
- 【Qt Quick】零基础入门系列之安装与卸载(一)
[Qt Quick]概述 |本文大概阅读时间8分钟. |版权说明:原创文章,如需转载,请标明文章出处.https://blog.csdn.net/weixin_40192195/article/det ...
- C++后续:QT学习(Qt概述,创建QT项目)
目录 声明 一. Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt支持的平台 1.4 Qt版本 1.5 Qt的下载与安装 1.6 Qt的优点 二.创建 Qt项目 2.1 如何创建 2. ...
- Qt 学习(三) —— Qt 模块
1. Qt 模块简介 Qt由许多模块组成,分别支持不同领域的功能,主要分为 Essentials 和 Add-On. Qt Essential 是基本模块,它们可以在所有受支持的开发平台和经过测试的目 ...
最新文章
- pandas将dataframe中的年、月、日数据列合并成完整日期字符串、并使用to_datetime将字符串格式转化为日期格式
- 关于win7禁止标准用户安装软件 AppLocker使用
- 使用QtService实现Qt后台服务程序
- PHP易混淆函数的区分方法及意义
- Axure原型制作规范
- linux rz批量上传
- ACM团队周赛题解(2)
- 【跃迁之路】【716天】程序员高效学习方法论探索系列(实验阶段473-2019.2.6)...
- 脉冲神经网络原理及应用pdf_CNN卷积神经网络原理讲解+图片识别应用(附源码)...
- Ubuntu 16.04安装Markdown编辑器MarkMyWords
- Hibernate入门案例
- 墨盒注墨后出现断线或堵头的处理方法
- 行列转换的SQL语句
- CIO40:IT人22-30岁职业规划
- 淘宝用户行为分析(四):行为聚类
- excel poi 实现图片导出
- Druid java.sql.SQLException: connection holder is null
- 鼠标垫测试软件,百款鼠标垫测试(项目)
- 如何恢复小强中被修改的软件包
- 编码(NRZ、NRZI、曼彻斯特、4B
热门文章
- 其他计算机找不到共享打印机驱动程序,win10连接共享打印机时“找不到驱动程序”怎么解决_win10连接共享打印机时“找不到驱动程序”处理方法...
- hadoop面试题以及答案
- 单片机胡汉才第四版答案_单片机课后习题答案--胡汉才编
- 【C51单片机】6-ESP8266——wifi模块联网、AT指令
- XAMPP最详细的安装及使用教程
- VMware ESXi 7.0 Update 3c SLIC 2.6 Unlocker (2022 U3 Refresh)
- e320/t420/w520等 qm67/hm65/hm67等 6系芯片组更新BIOS以安装三代酷睿cpu提升性能的想法
- 小米miui全机型代码对照与各机型发布时间表 了解小米机型发展历程
- 传输线理论 1/4波长阻抗变换器的分析匹配
- 信号完整性(SI)电源完整性(PI)学习笔记(十)传输线的物理基础(三)