QT介绍
QT起源
Qt 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
QT历程
2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。
2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。
QT简介
Qt 是纯 C++ 开发的,所以学好 C++ 非常有必要,对于不了解 C++ 的读者,我建议先阅读《C语言教程》,再阅读《C++教程》。C++ 是在C语言的基础上发展起来的,学完C语言就学了 C++ 的一半了。另外还可以学习菜鸟教程:https://www.runoob.com/cplusplus/cpp-tutorial.html
Qt 还存在 Python、Ruby、Perl 等脚本语言的绑定, 也就是说可以使用脚本语言开发基于 Qt 的程序。开源社区就是这样,好东西就会被派生扩展,到处使用, 越来越壮大。
Qt 支持的操作系统有很多,例如通用操作系统 Windows、Linux、Unix,智能手机系统 Android、iOS、WinPhone, 嵌入式系统 QNX、VxWorks 等等。
QT开发环境安装
因为QT是纯C++开发的,所以又C++环境就可以开发QT程序,例如直接使用记事本进行开发,但这样太麻烦了,且开发效率低。Qt Creator是⼀个IDE,就是⼀个平台,⼀个开发环境,类似的⽐如说VS,也可以进⾏Qt开发,当然VS中的Qt是作为⼀个插件插⼊VS平台的。所以使用QT Creator进行QT开发是个很好的选择。
QT Creator下载
Qt官方提供的专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,Qt 官方下载网站如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/3ae70ad1aa9f4d9e4441ebff7b30b7d3.png)
点击进入archive目录,再点击进入qt子目录,就可以看到各个版本的Qt,根据需要点击进入对应版本的Qt目录。如下
![](https://i-blog.csdnimg.cn/blog_migrate/28781ea953c9a3de2e4a8da0e212b2aa.png)
QT安装
这里直接看其他博主的安装流程就可以:(31条消息) Windows Qt安装教程_叶落花枯的博客-CSDN博客_qt window安装
QT软件使用
新建项目
下载安装完成软件之后,通常在开始程序中启动,如下图,选择让如下程序
![](https://i-blog.csdnimg.cn/blog_migrate/5ea7a82d8cd045c6baab3ff2dcb16209.png)
软件启动以后,进入如下页面,点击新建项目。
![](https://i-blog.csdnimg.cn/blog_migrate/1fa619b5f52ec3e28be041240ebda7e7.png)
选择Application,再选择QT Widgets,然后点击choose。
![](https://i-blog.csdnimg.cn/blog_migrate/194145fc6103a8d018797aab19832f73.png)
然后更改项目名称和目录。
![](https://i-blog.csdnimg.cn/blog_migrate/1e7a7060d626b0eca33c542b2784315f.png)
更改名称和目录之后一直点击下一步即可,一直点到如下页面,在这里选择想要的基类。MainWindow类主要是平常的多按钮窗口,如我们使用的各种软件(图1所示)。而Widget主要是像QQ、微信等登录窗口时的小窗口(图2所示)。
![](https://i-blog.csdnimg.cn/blog_migrate/8d2f8aab2790c26da7288e2d3f68c5d0.png)
图1
![](https://i-blog.csdnimg.cn/blog_migrate/b2d905d193f141885d9df64cbf8eb1dd.png)
图2
![](https://i-blog.csdnimg.cn/blog_migrate/8d1765c52cd18d6e73deacb63084856e.png)
然后一直点击下一步即可,创建成功页面如下。主要目录如图中所示
![](https://i-blog.csdnimg.cn/blog_migrate/16556b6bb15278e33ab8bffeaa3c12d4.png)
Headers下的文件为头文件,主要是项目所需的一些头文件添加。
Socders下的主要是对于Widget类的功能文件实现。
Forms下则是UI设计页面,可以直接拖拽设计UI界面。
![](https://i-blog.csdnimg.cn/blog_migrate/42723047b22d0f33b81241e1fb421155.png)
QT基础知识
推荐B站的一个UP主的教学视频进行学习:https://www.bilibili.com/video/BV1N34y1H7x7?p=1&vd_source=b20ee285b06786a22804a1ea98f6732b
QT基础组件
图中所标部分的就是我们经常用的基础组件,标的都有名字,常用的就是按钮组件,Buttons下的各种按钮组件,可以都拖拽试试。
![](https://i-blog.csdnimg.cn/blog_migrate/4e231880b96c76b5a8f9cfbe8c32cb21.png)
对使用的组件进行布局,选中自己已经设计好的组件,在页面上方有水平、垂直、栅格等布局按钮,直接点击即可,如图所示
![](https://i-blog.csdnimg.cn/blog_migrate/bffc4234ba9b8959450f0fa4ff32110f.png)
设计组件属性,首先需要鼠标选中组件,然后再页面右下角可以调整页面的各个属性。
![](https://i-blog.csdnimg.cn/blog_migrate/b5d54eca33a125d0f9fe15f7888c5697.png)
QT信号与槽函数
QT信号即相当于前端中的事件,是触发组件的方式,如下图所示
![](https://i-blog.csdnimg.cn/blog_migrate/89558c93a0f80b0bfc622da945427ece.png)
槽函数是触发信号后的要执行的函数,如下所示
![](https://i-blog.csdnimg.cn/blog_migrate/30d18f9ced3911d5dee9c6a81464545c.png)
QT基础组件绑定信号与槽函数
方式一
通过鼠标右键点击需要绑定的基础组件,弹出下图,点击转到槽。
![](https://i-blog.csdnimg.cn/blog_migrate/bb46c3b903c0fbb18b678f4308ed1061.png)
然后选择要触发的信号
![](https://i-blog.csdnimg.cn/blog_migrate/80ce51eb7895568f2dbc4225f8bf91f6.png)
然后软件会自动创建一个槽函数在widget.cpp下,在函数里面写我们想要触发的事件即可
![](https://i-blog.csdnimg.cn/blog_migrate/9aeadfa27e239170bd3a1d7e7bb13b3a.png)
方式二
通过宏的方式写,即在构造函数Widget下写相关代码,用connect方法,在connect函数中需要写入四个参数。
第一个是发出信号的组件,第二个是发出的什么信号,第三个是如何谁处理信号,即哪个类处理,第四个参数是如何处理。具体示例如下所示
![](https://i-blog.csdnimg.cn/blog_migrate/a8a0e63d45253479f53abd9c2feb6ac2.png)
方式三
首先在头文件下写槽函数的声明
![](https://i-blog.csdnimg.cn/blog_migrate/942d3eee2bc89da74867ff7467c0a201.png)
然后再widget.cpp文件下widget类下的构造函数下写继续使用connect方法,不过参数的形式有点不同,这种方式适用于槽函数执行内容少的形式。
第二个和第四个参数使用取地址符的形式,示例如下
![](https://i-blog.csdnimg.cn/blog_migrate/b95067dc8a4dd6946380ba1c858bd144.png)
总结
注意:无论使用哪种方式进行信号和槽函数的绑定,都要在头文件下的的slots下对要绑定的槽函数进行声明,如图所示
![](https://i-blog.csdnimg.cn/blog_migrate/1707ca04efb9e82151265bd99b5bd67a.png)