Qt编程(一)-认识

0,Qt和MFC对比

面试的时候可能都会问,为什么开发C++用QT而不用MFC,查阅了一些资料,总结有以下几点,面试可以这样回答:

先说QT:

  1. 跨平台,可在Windows、 Linux、Unix等多平台开发。
  2. QT做的GUI开发要比MFC要好,并且QT界面库支持CSS,界面设计更方便更美观。
  3. 面向对象的特性体现的比MFC明显,在命名,继承,类的组织等方面保持了优秀的一致性,代码写起来比较优雅。
  4. 近几年MFC没有太大的发展,QT一直在更新,功能也越来越强大。

再说MFC:

  1. MFC主要是对Windows API的封装,所以只能用于windows平台,在windows平台下的地位毋庸置疑。
  2. MFC运行程序的效率比QT高。
  3. MFC的库比QT更全。

个人总结:

  1. 现阶段还是MFC的用户量较大,近几年QT暂时还不能撼动MFC的地位,但是应该看得更加长远一些。
  2. 无论是QT还是MFC都只是编程的开发工具,程序最重要的是架构,其次是算法,最后是界面实现。更应该注重基础: C/C++的特性,数据结构与算法之类等。

一,Qt的意义

1,Qt简介:

Qt是一个跨平台的C++的图形用户界面应用程序框架。它为成功内需开发者提供图形界面所需要的所有功能。面向对象,易扩展,并且允许真正的组件编程

2,Qt发展:

  • 1991年最早由奇趣科技公司开发,
  • 1996年开始进入商业领域(马提亚斯·埃特里希创建的KDE项目)。
  • 2008年Qt被诺基亚收购。成为诺基亚旗下的编程语言。
  • 2012年Qt又被Digia公司收购。
  • 2014年发布跨平台的集成开发环境Qt Creator 3.1.0。同年又发布5.3正式版,支持对目前主流平台的支持:iOS、Android、WP(Windows phone 已关闭)等移动平台。

3,平台:

  • Windows:XP,Vista,win7,win8,win10
  • Unix/Linux:Ubuntu(建议LTS版)
  • Mac OSX
  • Embedded(嵌入式):有帧缓冲支持的嵌入式Linux平台,Windows CE

4,Qt版本:

  • 商业版:为商业软件开发,提供传统商业软件发行版,并且提供在商业有限期内的免费升级和技术支持服务。
  • 开源版:为开发自由而设计的源码软件,提供和商业同样的功能,在GUN通用公共许可下免费

5,Qt Creator:

是一个用于Qt开发的请谅解跨平台开发环境,有两大益处:1,提供首个专为支持跨平台开发而设计的集成开发环境(IDE),并确保首次接触Qt框架的开发人员能快速上手和操作。2,即使不开发Qt应用程序,Qt Creator也是简单易用且功能强大的IDE。

6,Qt优点:

  • 1,跨平台,几乎支持所有平台
  • 2,接口简单,易上手,学习Qt框架对学习其他框架有参考意义
  • 3,面向对象,高度模块化,可重用性好,易开发
  • 4,丰富的API
  • 5,大量的开发文档
  • 6,可进行嵌入式开发

二,Qt5的安装

1,下载Qt5

  • 1,Qt离线下载地址下载地址
  • 2,选择archive项目 -> qt -> 选择版本(我选择的5.12.12,大公司由于历史包袱,技术积累比较多,版本更新跨度大易出问题)-> 根据平台,选择开发环境,我这使用Windows
    在这里插入图片描述
    在这里插入图片描述
  • 3,下载完成之后,如果有Qt账户的可以不用关注网络直接安装,如果没有Qt账号的可以断一下网,这样能跳过账号登录,选择位置安装
    在这里插入图片描述
  • 4,选择安装项:
    • 在Windows系统下,选择Windows开发的编译工具开发会方便一些,点击next,配置安装组件,选择MSVC32位版本和64位版本;
    • Sources是源码 建议勾选,可以通过看源码来了解Qt的原理;
    • UWP在Windows下的移动端开发 使用场景很少,Windows系统的手机几乎退出市场了
    • Tools是一个Debug调试工具,如果做嵌入式的话,增加 勾选上Strawberry Perl;
      在这里插入图片描述
  • 5,Qt设置完成后,next,接受协议,接下来就是安装的等待,根据计算机配置不同安装时间不同。
  • 6,到此安装完成
    在这里插入图片描述

2,Qt Creator环境认识

在这里插入图片描述

  • Qt主界面有
    • 欢迎:Projects, 示例,教程,Marketplace
    • 编辑:项目调试使用
    • 设计:项目调试使用
    • Debug:项目调试使用
    • 项目:项目结构呈现
    • 帮助:帮助里面提供很多Qt开发过程中使用的库文件

三,Qt项目介绍

1,新建项目

  • 1,在欢迎模块-> New->新建项目,里面包含应用(application)、库(library),其他项目(QT插件)、空项目(Non-Qt Project)、导入库(import Project)
    在这里插入图片描述

  • 2,选择Build System,Qt使用qmake编译系统(5.0之后支持),如果项目需要迁移环境,比如Linux等,选择CMake
    在这里插入图片描述

  • 3,Detail里面 Base Class-> 选择QMainWindow(主窗口),QWidget(非模态视图),QDialog(对话框)
    在这里插入图片描述

  • 4,翻译文件,语言:根据项目需求选择语言,这里选择Chinese大陆
    在这里插入图片描述

  • 5,Kits工具集根据需求选择,我这里选择2017的32位
    在这里插入图片描述

    • MSVC:是微软开发的编译环境,我们使用Windows操作系统做开发时,使用微软的编译环境出现bug的机会少一些。我们都直到32位操作系统和APP,最大的寻址范围只有4G,这里我们做简单演示,基本上都是小app,用不4G内存,我们选择32的MSVC编译环境
  • 6,版本控制里面如果需要支持移动端设备,添加相应配置即可,这里我们简单起见不用加版本控制:
    在这里插入图片描述

  • 项目管理:在多人协作开发项目使用,还有版本的迭代和回滚所需要的功能,到后续再讲述,直接点击完成。

2,项目文件介绍

  • 1,项目建好后,qt开发环境帮我们把所有初级文件都建立好了
    在这里插入图片描述
  • 2,创建完成后,我们可以运行看看效果:
    在这里插入图片描述
  • 3,main.cpp介绍
    在这里插入图片描述
    • main函数,应用程序的入口
    • QApplication:Qt应用程序的头文件,每个Qt开发的界面程序都需要使用
    • 上图中,main函数为带参数的主函数
    • QApplication a(argc, argv); 创建一个Qt框架的App对象a,每个app有且仅有一个a对象
    • QTranslator:翻译器
    • MainWindow:创建一个自定义的窗口对象w
    • w.show():创建的窗口对象w调用show()函数才能显示
    • a.exec():app对象a,调用exec()函数循环接收信号,对信号处理,若为关闭信号则退出app
  • 4,mainwindow 介绍
    在这里插入图片描述
    • Q_OBJECT:信号和槽是Qt开发的基础,它可以将两个毫无联系的对象连接在一起,槽和普通的C++函数一样,只有它和信号连接在一起后,当发信号时,槽会自动被调用,只有加入了Q_OBJECT,才能使用Qt里的signal和slot机制。
    • parent:指向父类的一个指针。

3,调试器问题

  • 有些朋友可能会遇到调试器问题,发现调试器无法工作,这是因为win10的SDK默认是没有安装调试工具的,需要自己安装
    在这里插入图片描述

四,QPushButton

1,手动创建QPushButton

  • 1,引入头文件,#include
  • 2,构造函数里面创建QPushButton对象,析构函数记得delete
  • 3,设置button属性:
    在这里插入图片描述

2,可视化创建QPushButton

  • 编辑->Forms文件里面双击要创建的.ui桌面板
    在这里插入图片描述
    图形界面对按钮的创建及修改非常方便,所见即所需,在右下角部分为对象的属性设置框,在其中修改数据,可视化界面中能及时看到修改后的效果。

3,属性面板常用功能介绍

在这里插入图片描述

一些常用的属性参数:

  • ObjectName:对象名,这在属性框中是不可修改的,但可以右击按钮对象>修改对象名称,来修改。
  • Enbled:是否启用该按钮,如果不启用,运行时,整个按钮为灰色不可点击状态。
  • Geometry:几何参数,(220,110)是坐标原点,91x31是对象宽高
  • Palette:颜色参数,这里直接继承父类的颜色
  • Font:字体参数
  • Cursor:光标,是指鼠标移动到该按钮上的光标样式,这里依然是箭头
  • styleSheet:调整颜色,背景,字体的颜色

五,Qt帮助文档:Qt助手的使用

1,打开Qt助手

点击系统,搜索assistant,看到:
在这里插入图片描述
在这里插入图片描述
我们可以通过帮助文档,学习Qt,助手中有所有类,控件,方法的介绍,对我们学习Qt,有很大帮助。
比如,索引来搜索 QPushButton:
在这里插入图片描述

2,简单介绍助手文档内容

在这里插入图片描述

  • qmake:QT+=widgets:在编译的时候,在.pro文件中必须加上widgets模块,但这是个基础模块,默认已经加入的,如果我们需要TCP网络的时候,需要使用到QTcpSocket类,那么就需要在.pro文件里面添加network模块,不然无法使用网络。
    在这里插入图片描述
  • Inherits:QAbstractButton 这个是告诉该类继承了QAbstractButton类。
  • InHerited By:QCommandLinkButton,该类的子类。
  • 除此之外,还有一些,公开的,保护的,私有的一些方法,给我们写程序提供了丰富的接口

六,Qt对象树

1,什么是对象树

  • Qt中的QObject会用对象树来组织管理自己,比如创建一个QObject并指定父对象是,就会把自己加入到父对象的childre()列表中,也就是QList<QObject *>变量中。
  • 我们每new一个对象 都会给他指定一个父类,比如:一个对象myObject,而这个对象在构造的时候也都要指定一个父类,即QObject。

2,对象树模式的好处

  • 好处即,当父对象被析构时,子对象也会被析构,从一定程度上讲,简化了内存回收机制。Qt运用对象树模式,当父对象被析构时,子对象自动delete掉,不用再写一堆释放对象的代码。
  • 系统会根据这个树状结构,释放整个结构的内存
    在这里插入图片描述

3,对象树的问题

  • 自动析构,涉及C++语法的问题,如果子对象,由于系统机制,自动释放,可能存在子对象被二次释放,过度析构,栈释放时,在堆上的对象导致崩溃
    在这里插入图片描述
  • 调整栈释放顺序后,即可解决崩溃问题:
    在这里插入图片描述

七,Qt中的信号和槽

类似于,发送和接收。

1,信号和槽(Signal&Slot)

  • 信号与槽(Signal&Slot)是Qt的基础,也是Qt的一大创新,因为有了信号与槽的编程机制,在Qt中处理 界面各组件的交互操作时,变得更加直观和简单,它可以让app开发人员把互不了解的对象绑定在一起

2,信号(Signal)

  • 信号就是在特定情况下被发送的事件,eg:PushButton最常见的信号就是鼠标单击时发送的clicked()信号,一个ComboBox最常见的信号是选择的列表项变化时发送的CurrentIndexChanged()信号。
  • GUI程序设计主要就是对界面各组件的信号相应,只需要知道什么情况下发送哪些信号,合理去响应和处理这些信号即可。

3,槽(Slot)

  • 槽就是对信号的响应函数,与一般的C++函数一样,可以定义在类的public,private,protect,可以具有任何参数,也可以直接被调用。
  • 槽函数与一般函数不同的是,槽函数可以与一个信号关联,当信号被发送,关联的槽函数被自动执行。
  • 信号和槽关联是用,QObject.connect()函数实现的,基本格式为:
QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
参数1:信号的发送者
参数2:发送的信号
参数3:信号的接收者
参数4:处理函数(槽函数)

4,信号与槽示例QPushButton

  • 1,我们打开Qt助手,搜索QPushButton,发现没有signal,只有个public slot
    在这里插入图片描述
  • 找QPushButton的父类,QAbstractButton,找到signals
    在这里插入图片描述
  • 2,可以看到里面有4个信号
    在这里插入图片描述
  • 3,关于响应的槽函数,一般在窗口里面,比如,MainWindow类是QMainWindow的子类:
    在这里插入图片描述
  • 4,从public slot里面找函数
    在这里插入图片描述
    在这里插入图片描述
  • 5,注意click和clicked的使用,clicked是信号, click是槽函数,示例如下:
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆MOON

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值