Qt之小学徒学习记录分享
Qt学习计划
学习目录
- Qt学习计划
- 前言
- 一、Qt是什么?
- 二、学习&使用步骤
- 1.对于Qt的下载和安装,网上以及CSDN有丰富的资源,这里博主不再赘述,相信下载和安装对屏幕前的你来说是小菜一碟,那么接下来跟博主一起探索Qt吧!!!
- 2.简单介绍配置环境
- 3.深入地学习Qt Creator设计GUI应用程序的基本方法
- 4.信号与槽
- 总结
前言
从1994年至今,Qt已经走过了20多年的发展历程,日趋成熟并广受欢迎。Qt是非常优秀的跨平台应用开发框架,在专业应用领域,很多应用软件都是采用Qt C++开发的,在很多研究领域,开发的专业软件一般需要在 Linux、Windows或macOS 等多种平台上运行,使用Qt就是非常好的选择。
一、Qt是什么?
在学习Qt之前,你需要对C++有着基本的认识,C++是一种通用的标准编程语言,使用任何编辑器都可以编写C++源程序,然后利用C++编译器对程序进 行编译,就可以生成可执行的程序。
为了方便进行C++程序的编写和编译,有各种综合开发环境( Integrated DevelopingEnvironment,IDE),如 Visual Studio就是Windows平台上常见的编写C++程序的IDE。一个IDE不仅提供程序的编辑和编译,一般还提供一套基本类库,用于提供支持平台应用程序开发的各种基本类,如Visual Studio 使用MFC进行 Windows平台的应用程序开发。
Qt是一套应用程序开发类库,但与MFC不同,Qt是跨平台的开发类库。Qt支持PC和服务器的平台,包括Windows、Linux、macOS等,还支持移动和嵌入式操作系统,如 iOS、Embedded Linux,Android、WinRT等。跨平台意味着只需编写一次程序,在不同平台上无需改动或只需少许改动后再编译,就可以形成在不同平台上运行的版本。这种跨平台功能为开发者提供了极大的便利。
Qt最早是由挪威的Haavard Nord和Eirik Chambe-Eng在1991年开始开发的,在1994年发布,并成立了一家名为Troltech 的公司。Trolltech公司在2008年被诺基亚公司收购。2012年,Qt被Digia公司收购,并在2014年成立了独立的Qt公司,专门进行Qt的开发、维护和商业推广。
经过20多年的发展,Qt已经成为最优秀的跨平台开发框架之一,在各行各业的项目开发中得到广泛应用。许多大型软件都是用Qt开发的,如Autodesk Maya、Google Earth、Skype、wPS Office等。
C++语言使用广泛,长盛不衰,易在不同平台上移植,其编译生成的程序执行效率高,所以在专业研究领域很多开源的算法程序或类库都是用C++编写的。使用Qt C++编写应用程序,可以使自己的应用程序具有跨平台移植的功能,也可以利用各种开源的类库资源。所以,扎实地掌握Qt C++编程就如同掌握了一件利器,无论是通过编程实现自己的专业研究成果,还是从事专业软件开发都具有长远意义。
二、学习&使用步骤
1.对于Qt的下载和安装,网上以及CSDN有丰富的资源,这里博主不再赘述,相信下载和安装对屏幕前的你来说是小菜一碟,那么接下来跟博主一起探索Qt吧!!!
等等开始学Qt前再吸收一点前置芝士哈哈哈!
根据开发项目的不同,Qt分为桌面和移动设备应用开发、嵌入式设备开发两大类不同的安装包。
桌面和移动设备应用开发就是开发在PC、服务器、手机、平板电脑等设备上运行的程序,操作系统平台可以是Windows、Linux、macOS、Android(就是跨平台性)等。用于桌面和移动设备应用开发的Qt具有开源许可协议,可以免费下载和使用。
嵌入式设备开发是针对具体的嵌入式设备来开发应用程序,如物联网设备、汽车电子设备、医疗设备等特定的嵌入式设备。用于嵌入式设备开发的Qt可下载30天试用版本。
小学徒的Qt学习方向是桌面应用程序开发的,所以下载使用的是桌面和移动设备开发的Qt 5.9.1开源版本,接下来开始真正的学习哈哈哈
2.简单介绍配置环境
对Qt Creator可以进行一些设置,如刚安装好的Qt Creator界面语言可能是中文,但是很多词汇翻译得并不恰当,可以将Qt Creator 的界面语言设置为英文。(博主设置了部分中文,循序渐进哈哈哈)这里博主感觉英语水平的作用很多人低估了,工作后博主发现很多文档资料都来源于国外书籍,各种翻译软件终归翻译成中文不地道,建议各位未来的程序员或者已经工作的程序员朋友有精力的话尽量强化英语的学习,这很重要哦!!
单击Qt Creator菜单栏的“工具”→“选项”菜单项会打开选项设置对话框,对话框的左侧是可设置的内容分组,单击后右侧出现具体的设置界面。常用的设置包括以下几点。
- Environment 设置:在Interface页面可以设置语言和主题,若选择全部配置英文则语言选择为English;为了使界面抓图更清晰,设置主题为Flat Light。更改语言和主题后需要重新启动Qt Creator才会生效。
- Text Editor 设置:在此界面可以设置文本编辑器的字体,设置各种类型文字的字体颜色,如关键字、数字、字符串、注释等字体颜色,也可以选择不同的配色主题。编辑器缺省字体的大小为9,可以修改得大一些。
- Build & Run设置:图1-4显示的是Build &Run的设置界面,它有以下几个页面。
(1)Kits页面显示 Qt Creator可用的编译工具,在图中可以看到有3个编译工具可用。
(2) Qt Versions页面显示安装的Qt版本,有Qt 5.9.1 MinGW 32bit、Qt 5.9.1 MSVC2015 32bit
和Qt 5.9.1 MSVC2015 64bit 3个可用的版本。
(3)Compliers页面显示系统里可用的C和C++编译器,由于安装了MinGW和Visual Studio
2015,Qt Creator会自动检测出这些编译器。
(4)Debuggers页面显示Qt Creator自动检测到的调试器,有GNU gdb for MinGW调试器
和 Windows的CDB调试器。
注意:如果只是在计算机上安装了Visual Studio 2015(太新的话和很多企业的老代码不太匹配),则MSVC2015的两个编译器的图标会变为带有感叹号的一个黄色图标。Debuggers页面没有Windows的CDB调试器,可以用MSVC编译器对Qt Creator编写的程序进行编译,但是不能调试,这是因为缺少了Windows Software Development Kit (SDK).这个SDK 不会随Visual Studio一同安装,需要从Microsoft网站上下载。可以下载 Windows SoftwareDevelopment Kit (SDK) for Windows 8.1,安装后重启计算机即可。
3.深入地学习Qt Creator设计GUI应用程序的基本方法
在这里博主将继续深入地介绍 Qt Creator 设计GUI应用程序的基本方法,包括Qt创建的应用程序项目的基本组织结构,可视化设计的UI界面文件的原理和运行机制,信号与槽的使用方法,窗体可视化设计的底层原理,应用程序的窗体、组件布局、菜单、工具栏、Actions等常见设计元素的使用方法。
开始!!!: UI文件设计与运行机制
单击Qt Creator的菜单项"文件"→"新建文件或项目"
这样就在Qt Creator 中新建一个Widget Application项目成功了,它在选择窗口基类的页面选择了QWidget 作为窗体基类,并选中“Generate form”复选框。创建后的项目文件目录树如上图所示。
这个项目包含以下一些文件。
1·项目组织文件demo_blog.pro,存储项目设置的文件。
widget.h &Sources
2·主程序入口文件 main.cpp,实现main()函数的程序文件。
main.cpp
3·窗体界面文件 widget.ui,一个XML格式存储的窗体上的元件及其布局的文件。
4.widget.h是所设计的窗体类的头文件,widget.cpp是 widget.h里
定义类的实现文件。在C++里,任何窗体或界面组件都是用类封装的,一个类一般有一个头文件(.h文件)和一个源程序文件(.cpp文件)。
项目管理文件.pro
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
4.信号与槽
信号与槽(Signal & Slot)是Qt编程的基础,也是Qt的一大创新。因为有了信号与槽的编程机制,在Qt中处理界面各个组件的交互操作时变得更加直观和简单。
信号(Signal)就是在特定情况下被发射的事件,例如 PushButton最常见的信号就是鼠标单击时发射的 clicked()信号,一个ComboBox最常见的信号是选择的列表项变化时发射的CurrentIndexChanged()信号。GUI程序设计的主要内容就是对界面上各组件的信号的响应,只需要知道什么情况下发射哪些信号,合理地去响应和处理这些信号就可以了。
槽(Slot)就是对信号响应的函数。槽就是一个函数,与一般的C++函数是一样的,可以定义在类的任何部分(public、private或 protected),可以具有任何参数,也可以被直接调用。槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。
信号与槽关联是用QObject::connect()函数实现的,其基本格式是:
QObject::connect(sender,SIGNAL(signal()),receiver,SLOT(slot()));
connect()是QObject类的一个静态函数,而QObject是所有Qt类的基类,在实际调用时可以忽略前面的限定符,所以可以直接写为:
connect(sender,SIGNAL(signal( )),receiver,SLOT (slot( )));
其中,sender是发射信号的对象的名称,signal()是信号名称。信号可以看做是特殊的函数,需要带括号,有参数时还需要指明参数。receiver是接收信号的对象名称,slot()是槽函数的名称,需要带括号,有参数时还需要指明参数。
SIGNAL和SLOT是Qt的宏,用于指明信号和槽,并将它们的参数转换为相应的字符串。例如,在demoblog_的ui_widget.h文件中,在 setupUi()函数中有如下的语句:
QObject::connect(btnclose,SIGNAL(clicked ( )), widget,SLOT (close( )));
其作用就是将btnClose按钮的clicked()信号与窗体 ( Widget)的槽函数close()相关联,这样,当单击btnClose按钮(就是界面上的“Close”按钮)时,就会执行Widget的close()槽函数。
关于信号与槽的使用,有以下一些规则需要注意。
(1)一个信号可以连接多个槽,例如:
connect (spinNum,SIGNAL(valueChanged(int)),this,SLOT(addFun(int));
connect(spinNum,SIGNAL (valueChanged(int)),this,SLOT(updateStatus(int));
这是当一个对象spinNum 的数值发生变化时,所在窗体有两个槽进行响应,一个addFun()用于计算,一个updateStatus()用于更新状态。
当一个信号与多个槽函数关联时,槽函数按照建立连接时的顺序依次执行。
当信号和槽函数带有参数时,在 connect()函数里,要写明参数的类型,但可以不写参数名称。
(2)多个信号可以连接同一个槽,例如在本项目的设计中,让三个选择颜色的 RadioButton的clicked()信号关联到相同的一个自定义槽函数setTextFontColor()。
connect(ui->rBtnBlue,SIGNAL(clicked()) , this,SLoT(setTextFontColor()));
connect(ui->rBtnRed,SIGNAL(clicked()) , this,SLOT(setTextFontColor()));
connect (ui->rBtnBlack,SIGNAL(clicked( )) , this,SLOT(setTextFontColor()));
这样,当任何一个RadioButton被单击时,都会执行setTextFontColor()函数。
(3)一个信号可以连接另外一个信号,例如:
connect (spinNum,SIGNAL(valueChanged(int)),this,SIGNAL (refreshInfo(int));
这样,当一个信号发射时,也会发射另外一个信号,实现某些特殊的功能。
(4)严格的情况下,信号与槽的参数个数和类型需要一致,至少信号的参数不能少于槽的参数。如果不匹配,会出现编译错误或运行错误。
(5)在使用信号与槽的类中,必须在类的定义中加入宏Q_OBJECT。
(6)当一个信号被发射时,与其关联的槽函数通常被立即执行,就像正常调用一个函数一样。只有当信号关联的所有槽函数执行完毕后,才会执行发射信号处后面的代码。
信号与槽机制是Qt GUI编程的基础,使用信号与槽机制可以比较容易地将信号与响应代码关联起来。
总结
所有的伟大,都源于一个勇敢的开始,千里之行,始于足下,算法小学徒在这里与大家永远保持对着技术的热枕,永远保持对世界的好奇心,默默地遵从内心,沉淀技术,每天进步一点点,总有一天,你终会到达你心目中的顶峰!!!
Qt之小学徒学习记录分享相关推荐
- 微信小程序学习记录【1】【项目结构构成、官方文档构成、基本配置】
微信小程序学习记录[1][项目结构构成.基本配置]文章目录 项目结构构成 官方文档结构 基本配置 1. 小程序配置 1.1 app.json 1.2 page(页面名).json 1.3 sitema ...
- 小程序学习记录(二)——view、text、image标签、flex布局
距离上一篇博客已经过去有小半个月时间了,这期间我为了一个工作机会赶出了几个项目.四处奔波面试.不断学习,修改简历等.这些会在这两天整理一下以博客的形式记录下来.本篇博客继续我们的小程序学习记录,记录的 ...
- 微信小程序学习记录(一)
如何定义一个全局变量: 1,在根目录下app.js中添加 App({globalData: {g_isPlayingMusic : false,g_currentMusicPostId :null,d ...
- 微信小程序学习记录——5.组件
文章目录 1.视图容器 view scroll-view swiper swiper-item movable-view movable-area movable-view cover-view co ...
- 微信小程序学习记录——3.框架-逻辑层
文章目录 1.逻辑层简介 2.注册程序 App() onLaunch,onShow参数 getApp() 3.场景值 4.注册页面 Page() 生命周期 生命周期中的函数 初始化数据 页面相关事件处 ...
- ❤️blotemJ陆小马学习资源分享❤️
需要什么资源去 博客: https://blog.csdn.net/qq_30787727 下载: https://download.csdn.net/user/qq_30787727/uploads ...
- 小学期学习记录(一)
小学期的第一天,安装软件,配置环境. 小学期的第二天,跟着老师抄代码. 小学期的第三天,代码抄错了,环境有问题了. 小学期的第四天,努力改正ing. 小学期的第五天,失败. 小学期的第六天,放假. 转 ...
- json 微信小程序 筛选_微信小程序学习记录
全局配置 app.json 文件用来对微信小程序进行全局配置. pages 类型为 String Array 是 页面路径列表,创建目录和更改时会自动更改文件. 用于指定小程序由哪些页面组成,每一项 ...
- 关于微信和支付宝小程序审核记录分享
今天我的支付宝小程序审核终于过了
- 微信小程序学习记录——4.框架-视图层
文章目录 1.WXML 数据绑定 简单绑定 运算 组合 列表渲染 wx:for block wx:for wx:key 条件渲染 wx:if block wx:if wx:if vs hidden 模 ...
最新文章
- 最近一段时间开发客户端app的感悟
- 每日一皮:地铁上打瞌睡的程序员...
- Rails 定时任务——whenever实现周期性任务
- 乐鑫代理启明云端分享|ESP32驱动1.54inch(240*240)彩屏
- .net函数查询_特来电智能分析平台动态查询架构创新实践
- 【Java】统计字符串中每个字符出现的次数
- java获取项目路径
- 为了分页,先page.tld,再pageModel,再动态查询
- 短视频源码:新兴行业的一匹黑马
- SSH远程登陆配置sshd_config文件详解
- AI新技术:利用神经网络对图片进行超级压缩
- sql:mysql:函数:字符串函数
- java set方法_Set的常用方法(java)
- 39 个奇葩代码注释,看完笑哭了
- TortoiseSVN配置外部对比工具
- pandas级联与合并
- @Transactional使用
- but no encoding declared错误的解决方法
- commvault oracle备份,Commvault Oracle备份常用命令
- SQL 语句的多表查询方式