当前课程知识点:程序设计基础(下) > 拓展学习 > QT编程入门 > QT编程入门
Qt是一个跨平台的C++图形用户界面应用程序框架(GUI)。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。
面向对象,Qt 的良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常 方便的。 Qt 提供了一种称为 signals/slots 的安全类型来替代 callback,这使得各个元件 之间的协同工作变得十分简单。
丰富的 API,Qt包括多达 250 个以上的 C++类,还替供基于模板的collections, serialization,file,I/O device, directory management,date/time类。甚至还包括正则表达式的处理功能。
我们可以在这个网站中下载Qt:http://download.qt.io/archive/qt/。网站中列出了诸多可用的QT版本,个人建议5.5以上的版本都可以。我个人电脑为Win10,QT版本5.5.1。
我们以5.5.1版本为例进行讲解。
进去之后根据自己的需要可以下载不同环境编译器下版本,/qt-opensource-windows-x86-mingw492-5.5.1.exe/因为我们只设计到桌面界面开发下载此版本即可。
下载好之后我们启动安装
这里可以不需要注册账户直接skip就好。
之后一直默认系统安装即可,选择组件时可以“全选”进行安装即可。
QtCreator作为Qt官方的开发环境,对Qt各方面支持都非常完善,而且使用起来体验也非常好,所以没有特殊情况,建议大家使用Qt Creator进行Qt开发(PS:疑惑:难道还能使用其他IDE进行Qt开发?答疑:当然了,比如用的比较多的VS,不仅如此,即便不用IDE,直接使用记事本也可以编写Qt程序!)。
QtCreator主界面分为了6个模式:欢迎模式、编辑模式、设计模式、Debug调试模式、项目模式和帮助模式,分别由左侧的6个图标进行切换,对应的快捷键是Ctrl + 数字1到6。现在显示的就是欢迎界面,这里可以看到一些入门教程、开发的项目列表、Qt提供的示例程序,单击一个示例程序就可以直接打开该项目。单击左侧的Get Started Now会进入帮助模式,并打开Qt Creator指南,刚接触Qt的同学可以把里面的内容简单看下,当然,帮助中的内容是全英文的。
Qt安装好后,主菜单出现如上图目录。这里是Qt提供的几个工具软件。其中Assistant是Qt助手,它已经集成到了QtCreator中,就是帮助模式;Designer是Qt设计师,它也集成到了Qt Creator中,就是设计模式;Linguist是Qt语言家,用来对软件进行国际化翻译;下面的Qt 5.5for Desktop可以用来进行命令行操作,比如使用命令行来编译程序等,后续导出exe所需要的dll文件也用到了它的命令操作。
这里我们设计一个简单的圆面积计算器。
通过“文件->新建文件或项目”出现项目模板。在项目模板中选择Application,然后选择Qt Widgets Application,这样便会生成一个桌面Qt图形界面项目。
然后更改项目名称和路径,这里名称可以设置为untitled,注意名称和路径上都不要有中文。如下图所示。
下面设置构建套件,在默认勾选了Desktop构建套件,这个是用来编译桌面版程序的,如下图所示。直接单击“下一步”按钮。
现在显示的是项目的类信息,如下图所示。这里的基类可选的有QMainWindow、QWidget和QDialog三个,QMainWindow是一般桌面程序的主窗口。类名、头文件、源文件等都可以自定义名称,现在默认勾选了创建界面,这样可以使用设计器来设计主界面,这些内容建议都保持默认,直接单击“下一步”按钮。
最后是项目管理界面,这里显示了源码目录和项目中自动添加的文件,还可以设置版本控制系统,不过现在我们没有使用到,所以直接单击“完成”按钮完成项目创建。
创建完项目后会进入编辑模式,这里可以对项目文件进行查看和编辑。左侧是项目文件的列表,这里将项目中的文件分为了头文件、源文件、界面文件等进行分类显示。除了显示项目文件,还可以通过下拉菜单来选择类视图、大纲等内容。在右侧就是代码编辑区域,这里对关键字进行了高亮显示。如下图所示。
单击上方的分栏图标,可以同时显示其他内容,比如这里选择显示“打开文档”和“文件系统”,这时会在项目文件列表下显示出已经打开的文档列表和文件系统,如下图所示。
下面双击界面文件目录下的mainwindow.ui文件,进入设计模式。在这里可以对界面进行可视化设计,也就是所见即所得。左侧是一些常用部件,可以直接拖动到界面上;右侧上方是对象和类列表,下方是部件的属性编辑窗口;在中间,上方是主设计区域,显示了窗口的主界面,下方是Action编辑器以及信号和槽编辑器。
我们从左侧部件列表中找到Display Widgets中的Lable标签,拖动两个到界面上,分别双击改名为“半径:”、“面积:”,并从右侧属性中找到Qframe,frameShape值改为Panel,frameShadow改为Sunken。
在Buttons中找到 Push Button按钮,拖一个到界面中,双击改名为计算,再从Input Widgets中找到Line Edit,拖两个到界面中。排好界面位置。
之后我们为button按钮添加触发事件,右键“计算”找到转到槽,点击Click()“确定”,添加按按钮后的触发事件。之后会自动跳动至mainwindow.cpp文件中出现void MainWindow::on_pushButton_clicked()的函数定义。
如下图所示敲如代码
点击运行程序,出现下图。
在运行时我们在左侧以Release形式运行,之后会在我们建立解决方案的目录下生成一个文件,打开文件找到相应的exe文件双击打开会发现缺少相应的dll文件。
我们用Qt 5.5 for Desktop来解决缺少dll文件问题。首先将exe文件复制到一个新的文件夹,比如a中。之后打开Desktop,用cd/d的命令定义到exe现在所在文件夹:cd/d C:\Users\hasee\Desktop\a。调用windeploy命令加文件名,回车得到很多dll文件如图。这是再看之前的文件夹中已经出现所需要的dll文件,exe文件也可以正常运行了。
以上就是一个简单的界面实现。
下面列出几个网站和视频供大家学习参考。
http://www.qter.org/forum.php?mod=viewthread&tid=193 这是一个线上的界面开发的教程。
https://www.bilibili.com/video/av34085761 一个QT的网上公开课视频,在B站上也可以搜索到,有c++基础学习是很容易。
-C++的常见错误
--C++的常见错误
-MFC入门
--MFC入门
-STL及使用示例
--STL及使用示例
-算法设计与算法分析基础
-算法设计基本方法与策略基础
-计算机前沿问题思考
-QT编程入门
--QT编程入门
-C++中的string类
-面向对象方法应用实例
-继承与多态应用实例
-排序算法
--排序算法
-C++常见问题汇总
-学习感悟(1)
--学习感悟(1)
-学习感悟(2)
--学习感悟(2)
-学习感悟(3)
--学习感悟(3)
-学习感悟(4)
--学习感悟(4)
-1.1面向对象方法的基本概念
-1.1面向对象方法的基本概念--作业
-1.2 C++中类的定义
-1.2 C++中类的定义
-1.3C++中对象的定义和访问
-1.3C++中对象的定义和访问--作业
-1.4类成员的访问控制
-1.4类成员的访问控制--作业
-1.5析构函数
--1.5析构函数
-1.5析构函数--作业
-1.6拷贝构造函数
-1.6拷贝构造函数--作业
-1.7 类声明与类实现的分离
-1.7 类声明与类实现的分离--作业
-1.8类的静态成员
-1.8类的静态成员--作业
-1.9类的常量成员
-1.9类的常量成员--作业
-1.10this指针
-1.10this指针--作业
-1.11类的友元
--1.11类的友元
-1.11类的友元--作业
-1.12类的对象成员
-1.12类的对象成员--作业
-1.13自定义类的运算符重载
-1.13自定义类的运算符重载--作业
-2.1 派生类的定义和继承方式
-2.1 派生类的定义和继承方式--作业
-2.2 派生类中函数的重定义
-2.2 派生类中函数的重定义--作业
-2.3派生类的构造函数和析构函数
-2.3派生类的构造函数和析构函数--作业
-2.4多继承
--2.4多继承
-2.4多继承--作业
-2.5多态
--2.5多态
-2.5多态--作业
-2.6抽象类
--2.6抽象类
-2.6抽象类--作业
-3.1cout和cin对象及插入和提取运算符
-3.1cout和cin对象及插入和提取运算符--作业
-3.2 使用put和get函数进行标准输出和输入
-3.3使用getline函数进行标准输入
-3.3使用getline函数进行标准输入--作业
-3.4 文件流对象
-3.5文件流对象及插入和提取运算符
-3.5文件流对象及插入和提取运算符--作业
-3.6文件流对象及put、get和getline函数
-3.7按数据块进行输入输出
-3.8按数据块进行输入输出实例
-3.8按数据块进行输入输出实例--作业
-3.9文件的随机读写
-3.9文件的随机读写--作业
-3.10用户自定义数据类型的输入输出
-3.10用户自定义数据类型的输入输出--作业
-4.1函数模板
--4.1函数模板
-4.1函数模板--作业
-4.2类模板
--4.2类模板
-4.2类模板--作业
-5.1数据结构基本概念(一)
-第五章 概论--5.1数据结构基本概念(一)
-5.2数据结构基本概念(二)
-5.2数据结构基本概念(二)--作业
-6.1线性表及其抽象数据类型
-6.1线性表及其抽象数据类型--作业
-6.2顺序表类模板
-6.2顺序表类模板--作业
-6.3顺序表的实现
-6.3顺序表的实现--作业
-6.4简单数据元素顺序表的应用问题
-6.4简单数据元素顺序表的应用问题--作业
-6.5复杂数据元素顺序表的应用问题
-6.5复杂数据元素顺序表的应用问题--作业
-6.6单向链表及其类模板
-6.6单向链表及其类模板--作业
-6.7单项链表的实现(一)
-6.7单项链表的实现(一)--作业
-6.8单项链表的实现(二)
-6.8单项链表的实现(二)--作业
-6.9单向链表的应用
-6.10循环链表及双向链表
-7.1栈及顺序栈
--7.1栈及顺序栈
-7.1栈及顺序栈--作业
-7.2 顺序栈的实现
-7.2 顺序栈的实现--作业
-7.3顺序栈的应用
-7.4 链接栈及其实现
-7.4 链接栈及其实现--作业
-7.5队列及其顺序存储
-7.5队列及其顺序存储--作业
-7.6 顺序循环队列的实现
-7.6 顺序循环队列的实现--作业
-7.7顺序循环队列的应用
-7.8链接队列及其实现
-7.8链接队列及其实现--作业
-8.1树的基本概念
-8.1树的基本概念--作业
-8.2二叉树及其性质
-8.2二叉树及其性质--作业
-8.3二叉树的抽象数据类型和顺序表示
-8.3二叉树的抽象数据类型和顺序表示--作业
-8.4二叉树的链式表示
-第八章 树和二叉树--8.4二叉树的链式表示
-8.5二叉链表的实现(一)
-8.6二叉链表的实现(二)先序和中序遍历
-8.6二叉链表的实现(二)先序和中序遍历--作业
-8.7二叉链表的实现(三)后序和逐层遍历
-8.7二叉链表的实现(三)后序和逐层遍历--作业
-8.8二叉链表的实现(四)
-8.9 二叉排序树
-8.10哈夫曼树和哈夫曼编码
-9.1图的基本概念及其特征
-9.1图的基本概念及其特征--作业
-9.2图的抽象数据类型和表示方式
--Video
-9.2图的抽象数据类型和表示方式--作业
-9.3图的邻接矩阵表示法的实现
-9.3图的邻接矩阵表示法的实现--作业
-9.4图的广度优先遍历
--Video
-9.4图的广度优先遍历--作业
-9.5图的深度优先遍历
-9.5图的深度优先遍历--作业
-9.6图的应用
--9.6 图的应用
-面向对象方法
--面向对象例题讲解
--友元和运算符重载
--对象成员
-继承与多态
--多重继承
--虚函数
--抽象类和纯虚函数
-输入输出流
--输入输出流操作
-模板
--函数模板
--类模板