从零开始学习Qt(一)
文章目录
- 一、Qt是什么
- 二、Qt的安装
- 三、Qt的优点
- 四、创建第一个程序
- 五、命名规范和快捷键
- 六、QPushButton
- 七、对象树
- 八、信号和槽
- 九、Lambda表达式
一、Qt是什么
Qt是跨平台的C++图形用户界面应用程序框架。
二、Qt的安装
下载网址:https://download.qt.io/archive/qt/
选择老一点的版本下载windows平台,登录Qt账号后一直点击下一步,组件不知道哪些有用就多选点
三、Qt的优点
- 跨平台,几乎支持所有的平台
- 接口简单,容易上手
- 一定程度简化内存回收机制
- 开发效率高,能快速创建应用程序
四、创建第一个程序
创建[Qt Widgets Application]
使用基类[QWidget]
// main.cpp
#include "mywidget.h"
#include <QApplication> //包含一个应用程序类的头文件// main程序入口 argc是命令行变量的数量 argv是命令行变量的数组
int main(int argc, char *argv[])
{// a应用程序对象,在Qt中,应用程序对象有且仅有一个QApplication a(argc, argv);// 窗口对象w myWidget的父类->QWidgetmyWidget w;// 窗口对象默认不会显示,必须要调用show方法显示窗口w.show();// 让应用程序对象a进入消息循环机制return a.exec();
}
//mywidget.h
Q_OBJECT // Q_OBJECT宏,允许类中使用信号和槽的机制
五、命名规范和快捷键
命名规范
类名:首字母大写,单词和单词之间首字母大写
函数名、变量:首字母小写,单词和单词之间首字母大写
快捷键
注释 ctrl + /
运行 ctrl + r
编译 ctrl + b
字体缩放 ctrl + 鼠标滚轮
查找 ctrl + f
整行移动 ctrl + shift + ↑
自动对齐 ctrl + i
同名之间的.h和.cpp切换 F4
六、QPushButton
// 创建一个按钮QPushButton * btn = new QPushButton;
// btn->show();// show以顶层方式弹出窗口控件btn->setParent(this);//显示文本btn->setText("第一个按钮");//创建第二个按钮 按照控件的大小创建窗口QPushButton * btn2 = new QPushButton("第二个按钮", this);//移动btn2按钮位置btn2->move(100, 100);//重置窗口大小resize(600, 400);//设置固定窗口大小setFixedSize(600, 400);//设置窗口标题setWindowTitle("第一个窗口");
七、对象树
创建QObject对象时,会将这个QObject对象添加到父对象的children()列表
父对象析构的时候,会把列表中所有对象析构
Markdown将文本转换为 HTML。
八、信号和槽
槽就是信号的处理函数
信号槽的优点:
松散耦合,信号发送端和接收端本身是没有关联的,通过connect连接将两端耦合在一起。
//需求 点击我的按钮 关闭窗口//参数1-信号的发送者 参数2-发送的信号 参数3-信号的接收者 参数4-处理的槽函数connect(btn3, &QPushButton::clicked, this, &myWidget::close);
自写信号和槽
//.h文件//槽函数返回值void,需要声明,也需要实现//可以有参数,可以发生重载void treat();signals://自定义信号写到signals下//返回值是void,只需要声明,不需要实现//可以有参数,可以重载void hungery();
//.cpp文件//创建一个老师对象this->tea = new Teacher(this);//创建一个学生对象this->stu = new Student(this);//老师饿了,学生请客的连接connect(tea, &Teacher::hungery, stu, &Student::thread);//调用下课函数classIsOver();
void Widget::classIsOver()
{//下课函数,调用后,触发老师饿了//信号需要触发emit tea->hungery();
}
信号和槽发生重载的情况
使用函数指针,指向重载的函数地址
//连接带参数的,信号和槽//指针->地址//函数指针->函数地址void(Teacher:: *teacherSignal)(QString) = &Teacher::hungery;void(Student:: *studentSlot)(QString) = &Student::treat;connect(tea, teacherSignal, stu, studentSlot);//连接无参的信号和槽void(Teacher:: *teacherSignal2)(void) = &Teacher::hungery;void(Student:: *studentSlot2)(void) = &Student::treat;connect(tea, teacherSignal2, stu, studentSlot2);//断开信号disconnect(tea, teacherSignal2, stu, studentSlot2);
信号与槽扩展
- 信号是可以连接信号的
- 一个信号可以连接多个槽函数
- 多个信号可以连接同一个槽函数
- 信号和槽函数的参数类型必须一一对应
- 信号的参数个数可以多于槽函数的参数
- 如果信号的发送者和接受者是一个,可以忽略接受者参数
九、Lambda表达式
C++1中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作
[函数对象参数](操作符重载函数参数)mutable->返回值{函数体}
函数对象参数:
- 【=】局部变量都用值传递方式
- 【&】局部变量都用引用传递方式
- 【a】将a按值进行传递
- 【&a】将a按引用进行传递
加入mutable可以修改值传递的拷贝
//->返回值
int ret = []()->int{return 1000;}();
从零开始学习Qt(一)相关推荐
- 关于从零开始学习qt制作蓝牙app和PC端的记录
1.提前准备学习 由于本人在此之前只学习过C语言,了解到QT制作会用到C++的基础部分,所以提前学习了C++,大概花费三天 接下来学习QT 推荐B站学习 基本只需要学习基本使用 后面实践才是最重要的 ...
- 从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用
从零开始学习音视频编程技术(七) FFMPEG Qt视频播放器之SDL的使用 原文地址:http://blog.yundiantech.com/?log=blog&id=10 前面介绍了使用F ...
- 从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像
从零开始学习音视频编程技术(六) FFMPEG Qt视频播放器之显示图像 原文地址:http://blog.yundiantech.com/?log=blog&id=9 前面讲解了如何用FFM ...
- Devops系统化,从零开始学习容器技术(更新中)
文章目录 Devops系统化,从零开始学习Docker.K8s 一.容器技术和Docker简介 1.1 Docker导学 1.2 容器技术概述 二.Docker环境的各种搭建方法 2.1 Docker ...
- 从零开始学习 webservice第一集,java webservice简单实例入门教程
现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回 ...
- python新手教程 从零开始-Python零基础从零开始学习Python十分钟快速入门
原标题:Python零基础从零开始学习Python十分钟快速入门 学习Python的,都知道Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言.Python是一种动态解释型的 ...
- python零基础难学吗-如何从零开始学习Python,零基础学python难吗
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
- python自学多久可以找到工作-25岁从零开始学习python还能找到工作吗?
相信近期大家经常可以看到培训机构推出python相关的课程,随着人工智能技术逐渐进入大众的生活,这种编程语言以简单.应用广泛的优势,成为了进入人工智能领域的条件之一.对于精通python开发的人,在职 ...
- python语言怎么学-如何从零开始学习Python,python语言编程入门
Python并不难学,它诞生至今已经过25个年头,但相对于其他语言,它更加易学.易读,非常适合快速开发,Python编程简单直接,更适合初学编程者. 那么,如何从零开始学习python呢? 可以分为这 ...
最新文章
- 挡d挡切换_吉行贴士 | 从N-D换挡,就是如此轻松
- 批处理文件检测windows系统是32位还是64位
- 关于malloc与字符指针的一些易错点
- 【BO】WEBI文件打开时提示Illegal access错误
- python 向量取整数_随机整数向量| 使用Python的线性代数
- 频谱扩展 matlab,简单的直接扩展频谱通信系统仿真分析
- Spring MVC学习总结(15)——SpringMVC之国际化简单实现
- 1.5多媒体技术的应用领域
- c语言二级考试题库及答案,c语言二级考试题库
- web前端开发流程图,118页Vue面试题总结,完整PDF
- OSChina 周二乱弹 —— C 语言是个女的?
- TabWidget当前标签底线颜色
- 数据挖掘与数据分析项目链家租房数据(一)数据爬虫
- 200行Py代码带你实现打飞机
- Java 小项目——字符界面收银台(优化版)
- 程序员提供9个最好的论坛
- linux7 设置隐藏账号,科学网-CentOS 7 在登录界面用户列表中隐藏指定账号-乔磊的博文...
- 基于京东云云主机搭建WordPress网站
- vscode中怎样格式化js代码_VSCode插件JS-CSS-HTML Formatter自动格式化代码
- [zt]某MBA创业失败后的感慨
热门文章
- android k主题,K主题(萌图锁屏)
- 趣说三次握手、四次挥手:遇到心动小姐姐,如何去把握?
- 华为云桌面Workspace,实惠更实用!
- 推荐一款高颜值的 Spring Boot 快速开发框架
- java 递归查找,Java程序使用递归查找自然数之和
- PPT集成Power BI仪表板实现交互式数据可视化
- 在线靶场-墨者-电子数据取证1星-安卓手机文件分析取证(陌陌ID号)
- 计算机怎么新建用户名和密码,win10怎么新建用户账户?win10系统如何创建新用户?(图文)...
- 2019微信公开课PRO:百果园获 “年度智慧服务”奖
- css设置不显示超出内容_显示...,css设置内容超出后显示省略号