从Qt 4到Qt 5(一)Qt 5.2安装、程序迁移和发布

news2024/12/25 0:24:01

导语

Qt 5的第二个重大版本Qt 5.2的beta版终于发布了,Qt 5.2是官方一再强调开发Android要使用的版本。经过了近一年的等待,这次终于可以完成夙愿,继续更新Qt系列教程了。在后面的教程中会尽量涉及大家经常问到、急需解决的问题,也会尽可能的把最新的技术和最炫的界面效果展示给大家。

这里也请大家把心态放平稳一些,是说大家学习的心态,也是说我写教程的心态。通过这几年的经历,我发现,凡事不能急功近利,只有平常心才能出真知,只有用最朴实(有时候可能显得不专业)的语言来描述讲解一个问题,才会让更多人容易读懂,才会得到更多人的赞誉。这里不得不说,写教程只是我在业余时间做的事情,我的技术水平也没有一些网友想的那么牛叉,之所以还要一直写下去,是因为有那么多网友的支持和肯定。也是在今天,我得知《Qt Creator快速入门》已经售罄,这距该书出版还不到一年半的时间。这里再次谢谢那些支持我的朋友,我会通过更好的教程和开源作品来感谢大家一直以来的支持!

环境:Windows 7 + Qt 5.2.0+QtCreator 3.0

目录

  • 一、软件安装
  • 二、运行一个Qt 4程序
  • 三、发布Qt 5程序

内容概要

本节讲述的内容主要有三点:

第一,一般的Qt 4程序要在Qt 5上编译,需要注意:

1.将main.cpp文件中的#include <QtGui/QApplication>修改为#include <QApplication>

2.在.pro项目文件中添加:greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

第二,在Qt 5中设置应用程序图标,需要注意:

1.将.ico图标文件放到项目源码目录

2.在.pro文件中添加:RC_ICONS = myico.icomyico.ico就是自己图标文件的名字)

第三,发布Qt 5程序时,除了必要的dll文件以外,还需要将plugins中的platforms目录复制过来,而里面只要保留qminimal.dllqwindows.dll两个文件即可。

正文

一、软件安装

1.下载并安装Qt 5.2

首先到Qt官方下载页面: http://download.qt-project.org/development_releases/qt/5.2/5.2.0-beta1/

因为是在Windows下,所以下载含有Android库的Windows版本,具体文件是:

qt-windows-opensource-5.2.0-beta1-android-x86-win32-offline.exe

这个安装包中已经包含了所有需要的工具(例如最新版的Qt Creator 3.0,当然要开发Android还是需要自己添加文件的),我们只需要下载这一个文件即可。

下载完成后,双击运行。这里一般不需要做任何设置,直接点击下一步直到软件安装完成。最后便自动打开了我们期盼已久的Qt Creator 3.0欢迎界面,如下图所示。

 

可以看到,欢迎界面和以前布局有了一些变动,更加清晰明了。但总体来说,整个界面及内容没有什么变化。

2.运行一个例子

我们点击“示例”,然后选择一个例子先来运行一下,比如这里选择Flickr View Example,这时会打开该程序并跳转到其帮助文档界面,如下图所示。

可以回到编辑模式简单看一下程序代码,然后点击运行按钮运行该程序,效果如下图所示。

这是个非常漂亮的图片浏览程序,是用qml编写的,不过这个并不是这里讲述的重点,非常先进且极具未来感的Qt Quick技术和QML语言会在后面专门的章节中详细讲解。这里要说的是,Qt 5已经是一个SDK了,它包含了开发所需要的大部分工具,包括了Qt Creator和MinGW,并做好了关联设置,所以我们可以看到,现在无需再像使用Qt 4.8那样手动设置就可以直接编译运行程序。

3.安装调试器

我们选择“工具”->“选项”菜单项,然后打开“构建和运行”页面中的构建套件,可以看到,这里已经自动检测到了一个构建套件。如下图所示。

不过,现在在构建套件前面有个黄色的感叹号,将光标移动到上面可以看到提示没有设置调试器。如下图所示。

在没有调试器的情况下,是无法启动调试模式的。这里,大家可以通过手动进行添加。先进入Debuggers标签页,可以看到现在这里还没有设置调试器,点击右侧的Add按钮,添加一个自定义的调试器,Name修改为gdb,Path选择Qt 5.2安装目录下的tool->mingw48_32->bin中的gdb程序,我这里是C:\Qt\Qt5.2.0\Tools\mingw48_32\bin\gdb.exe,完成后点击下面的应用按钮,效果如下图所示。

现在回到构建套件标签页,可以看到调试器已经默认选择为了我们添加的gdb,而且以前的黄色感叹号也消失了。

我们这里只是简单介绍了一下构建套件的设置,至于如何添加设置Android开发套件,会在后面专门的章节进行介绍,这里就不再讲解。

二、运行一个Qt 4程序

为了尽可能演示Qt 4程序在Qt 5编译时会出现的问题,我们这里使用了一个Windows Xp下面基于Qt 4.7创建的Qt Gui应用程序。这一节的目的就是让大家作为参考,如果你也遇到了类似的情况,那么可以这样来解决,如果没有遇到,则可以直接跳过相关内容。

1.编码问题

我们打开现有的Qt 4版本的helloworld源码目录,然后将helloworld.pro文件拖入到Qt Creator中打开该项目,这时会跳转到项目模式,进行项目配置,也就是选择构建套件。这里默认使用桌面版的Qt 5.2即可,如下图所示,然后点击ConfigureProject按钮。

下面我们打开项目文件列表中的helloDialog.cpp文件,因为这里有一行中文注释,所以出现了“错误:无法用”UTF-8”-编码解码”hellodialog.cpp”。无法编辑。”的错误提示,这是因为该文件不是使用UTF-8编码的,而其中的中文无法使用UTF-8自动解码造成的。为了使中文可以正常显示,并且以后不再出现该错误提示,我们可以通过下面的方法手动来将文件设置为UTF-8编码。

首先点击错误提示后面的选择编码按钮(也可以使用“编辑”->“选择编码”菜单项),然后选择GB18030/gb18030/ibm-1392/windows-54936一项,最后点击按编码重新载入按钮。如下图所示。

完成后发现已经可以正常显示中文了,但是如果关闭项目重新打开,中文依然无法正常显示。所以我们还需要继续设置。再次选择“编辑”->“选择编码”菜单项,然后选择UTF-8一项,点击按编码保存按钮。如下图所示。

这样设置完后,文件已经使用UTF-8进行保存了,后面再打开也不会出现编码错误了。

2.代码问题

下面先直接运行程序,这时会在问题面板出现QtGui/QApplication: No such file or directory的问题提示。如下图所示。

我们双击该问题,定位到出错位置,这时跳转到了main.cpp文件中,可以看到第一个头文件包含找不到路径。如下图所示。

我们可以到QtGui目录(我这里是:C:\Qt\Qt5.2.0\5.2.0-beta1\mingw48_32\include\QtGui)中查看一下,发现这里没有QApplication相关文件。为了更加明了和准确的讲解该问题,我们在Qt Creator中创建一个基于Qt 5.2的GUI程序作为参照。

选择“新建”->“新建文件或项目”菜单项,这里可以看到在应用程序中第一个是QtWidgets Application,而不再是Qt 4中熟悉的Qt GuiApplication,我们选择它作为模板。然后添加项目名称为helloqt,路径大家选择一个没有中文的目录即可。下面的Kit就选择默认的DesktopQt 5.2,然后类信息不用更改。

完成之后,我们先运行一下新建的helloqt程序,发现是没有问题的。这时打开其main.cpp文件,发现#include <QApplication>是这样写的,这里没有添加QtGui。现在我们更改前面helloworld项目中main.cpp文件的头文件包含为#include <QApplication>,不过,改成这样后依然提示找不到文件。

现在我们可以对照helloqt文件的内容,看看还有哪里与我们Qt 4程序不同。这时,在helloqt.pro文件中会很明显发现一行代码:

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

这行代码的大致意思是:在高于Qt4的版本中要添加QT += widgets,也就是说要使用widgets模块,这里的widgets模块到底包含了什么内容,有什么作用?这些问题我们暂且不考虑,现在将这行代码复制到helloworld.pro中,然后运行helloworld程序,发现程序已经可以可以正常运行了。

3.应用程序图标

在这一节的最后,我们再补充一点。在Qt 4中如果要给一个程序添加应用程序图标,需要先有一个ico图标文件,然后创建一个.rc文件,还要输入一行怪异的代码。而在Qt 5中这个变得非常简单,我们只需要将ico图标文件放到源码目录,然后在pro项目文件中添加一行代码RC_ICONS = myico.ico即可,后面myico.ico就是自己图标文件的名字。

三、发布Qt 5程序

现在helloworld程序已经可以编译运行了,下面我们将打包发布该程序。要作为发布使用,先要选择编译Release版本,然后运行。完成后到编译生成目录(我这里是:E:\qtsrc\build-helloworld-Desktop_Qt_5_2_0_MinGW_32bit-Release\release)中将生成的helloworld.exe文件复制到一个新建的文件夹中,比如这里放到了新建的helloworld文件夹中。然后双击运行helloworld程序,并根据提示到Qt 5.2的安装目录(我这里是:C:\Qt\Qt5.2.0\5.2.0-beta1\mingw48_32\bin)中将需要的dll文件复制过来,一共是9个。这样就可以在本机上运行该程序了,但是在别的没有安装该版本Qt的机子上还是无法运行,这时需要将C:\Qt\Qt5.2.0\5.2.0-beta1\mingw48_32\plugins中的platforms目录复制过来,而里面只要保留qminimal.dllqwindows.dll两个文件即可。最终效果如下图所示。

后面就可以将该文件夹通过压缩文件打包进行发布了。当然,如果程序中使用了其他模块,可能还需要复制plugins目录中的相应的文件。

结语

对于大部分Qt 4程序而言,Qt 5没有太大的改变,不过在升级移植的过程中还是会发现很多细节改动的。这一节我们讲述了Qt 5.2版的安装、设置,然后讲述了怎样将一个Qt 4程序使用Qt 5进行编译运行,最后还讲述了Qt 5程序的发布。

在下一节我们将会讲解Qt 5的整个框架,让大家更加清楚Qt 5中改变了哪些模块,增加和删除了哪些模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOV7 目标检测模型调试记录

前言 YOLO系列在目标检测领域可谓名声赫赫&#xff0c;其性能表现不俗&#xff0c;如今其已经更新到了YOLOV7版本&#xff0c;今天便来一睹其风采。 博主之前只是对YOLO算法的原理一知半解&#xff0c;并未实验&#xff0c;因此并不熟练&#xff0c;因此&#xff0c;借此机会来…

【JavaSE成神之路】一文洞悉Java的方法

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容是Java语言的方法。 目录 1.什么是Java方法 2.快速入门Java方法 3.如何调用Java方法 4.关于Java方法重载这件事 作业 1.什么是Java方法 Jav…

补遗: CS61a

补遗&#xff1a; CS61a 通过“圣经”《SICP》 了解到这门课。SCIP读着有点困难&#xff0c;想通过课程的引导。但是这个课程要比书基础很多&#xff0c;就当对计科学习的回顾和补遗了。本笔记也会在我读完 SICP 后更新。 课程地址&#xff1a;CS 61A Fall 2022 参照原书目录…

第52篇 Qt Quick简介

导语 在上一篇我们已经安装好了Qt 5.5&#xff0c;现在正式开始学习Qt5中全新的Qt Quick编程。Qt Quick对于大部分人来说是一个全新的概念&#xff0c;对这样一个全新的东西要怎样开始学习呢&#xff1f;在没有专业书籍&#xff08;当然&#xff0c;《Qt 5编程入门》现在已经出…

java计算机毕业设计ssm在线学习系统的设计与开发3nnzq(附源码、数据库)

java计算机毕业设计ssm在线学习系统的设计与开发3nnzq&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&a…

MapReduce 工作原理

文章目录MapReduce 工作原理一、MapReduce工作过程二、MapTask工作原理三、Reduce Task工作原理四、Shuffle工作原理五、MapReduce编程组件1、inputFormat组件2、Mapper组件3、Reducer组件4、Partitioner组件5、Combiner组件6、OutputFormat组件六、MapReduce运行模式1、本地运…

关于个人网站的搭建日志(1)静态网页

注&#xff1a;这篇文章不是教程&#xff0c;仅仅是个人踩过的一些坑的整理&#xff0c;建议大家去和前辈们多多交流&#xff0c;祝早日进步 &#xff08;1&#xff09;第一步&#xff0c;关于服务器&#xff1a; 我这里使用的是阿里云的云服务器&#xff08;0元一个月。。。…

视觉合集4

这里总结一些论文,包括多标签分类、姿态估计、目标检测、HOI、小样本学习等研究方向。 01 面向具有标注噪声的人脸表情识别 Attack can Benefit: An Adversarial Approach to Recognizing Facial Expressions under Noisy Annotations 大规模人脸表情数据集通常表现出极端的…

基于VBA实现电缆结构自动出图(一)——自动出圆形

大家敢相信吗&#xff0c;原来VBA竟然可以实现电缆结构自动出图&#xff0c;换句话说&#xff0c;只要输入数据&#xff0c;VBA会自动将电缆的结构画出来&#xff0c;同时还可以渲染&#xff0c;结果竟然不输画图软件&#xff0c;真真让我刮目相看。这里我就不过多介绍VBA了&am…

类的六个默认成员函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。空类中什么都没有吗&#xff1f;并不是的&#xff0c;任何一个类在我们不写的情 况下&#xff0c;都会自动生成下面6个默认成员函数。 2.构造函数 构造函数是一个特殊的成员函数&#xff0c;名字与…

STM32F4 | 跑马灯实验

文章目录一、 STM32F4 IO 口简介二、硬件设计三、软件设计1.位带操作&#xff08;F7除外&#xff09;四、实验现象五、STM32CubeMX 配置 IO 口输入在本章中&#xff0c;我们将通过代码控制 ALIENTEK 阿波罗 STM32 开发板上的两个 LED 灯 DS0 和 DS1 交替闪烁&#xff0c;实…

【salesforce Admin必备】-想到啥写点啥

【salesforce Admin必备】-想到啥写点啥 文章目录【salesforce Admin必备】-想到啥写点啥前言一&#xff0c;货币相关1.带汇率的多种货币-Activate multiple currencies with exchange rates1.1 启用多币种2.Update the Exchange Rate with ACM2.1启用高级货币管理&#xff08;…

数据结构【树和二叉树的相关知识和题目】

文章目录引言&#xff1a;一、树和二叉树的相关知识&#xff08;一、&#xff09;什么是树1.树&#xff08;1.&#xff09;日常生活中的树&#xff08;2.&#xff09;树的基本概念&#xff08;非线性结构&#xff09;&#xff08;3.&#xff09;代码人眼中的树&#xff1a;&…

ORB-SLAM2 --- Tracking::UpdateLocalKeyFrames函数

目录 1.函数作用 2. 函数步骤 3.code 4.函数解析 4.1 记录共视 4.2 更新局部关键帧&#xff08;mvpLocalKeyFrames&#xff09; 4.3 更新当前帧的参考关键帧&#xff0c;与自己共视程度最高的关键帧作为参考关键帧 1.函数作用 跟踪局部地图函数里&#xff0c;更新局部…

【在SpringBoot项目中删除相册数据--Service层】

由于AlbumMapper.java中已经实现了“根据id删除数据表中的相册数据”&#xff0c;所以&#xff0c;可以直接从Service开始开发此功能。 先在IAlbumService中添加抽象方法&#xff1a; /** * 删除相册 * param id 尝试删除的相册的id */ void delete(Long id); 然后&#xf…

[附源码]Python计算机毕业设计SSM基于web的烟草售卖系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Android Studio Gradle 无限 Build「假死」

Android Studio Gradle 无限 Build「假死」 解决方案 工程配置 Gradle 的 gradle.properties 文件中添加如下代码&#xff1a; org.gradle.daemontrue org.gradle.paralleltrue然后重新 Sync 工程&#xff0c;漫长等待依赖下载完成后&#xff0c;重新 Build 项目即可 补充 …

【Unity 3D 从入门到实战】Unity 3D 组件总结

目录 一&#xff0c;前言 二&#xff0c;常用组件 1&#xff0c;Transform 组件 2&#xff0c;Mesh Filter 组件 3&#xff0c;Box Collider 组件 4&#xff0c;Rigidbody 组件 5&#xff0c;脚本组件 三&#xff0c;总结 一&#xff0c;前言 组件是 Unity 3D 中的重要…

Attention Is All You Need

摘要 The dominant sequence transduction models 显性序列转换模型。complex recurrent 复杂的递归。convolutional neural networks 卷积神经网络。an encoder and a decoder 编码器和解码器。The best performing models性能最佳的模型the encoder →\rightarrow→ an atte…

D. Lucky Chains

传送门 题意&#xff1a;给你两个数x,y让你求满足xk,yk并且GCD(xk,yk)!1的最小值。 思路&#xff1a;要求满足xk,yk并且GCD(xk,yk)!1的最小值&#xff0c;那么就相等于存在(xk)%d(yk)%d 变化一下就等于(x-y)%d0&#xff0c;那么就是找x-y的约数&#xff0c;然后这个约数可能是…