在上一篇随笔中已经搭建好了Qt5的的开发环境,并且通过Qt Creator自动构建了一个视窗程序。在这篇文章中我们将手动编写一个HelloWold程序,简单了解一下Qt的构建过程。这里我们不会涉及到Qt代码部分,因此可以先不用理会代码是怎么回事,复制粘贴就行。

首先编写helloworld.cpp

#include <QPushButton>
#include <QApplication> int main(int argc, char *argv[])
{
QApplication app(argc, argv); QPushButton btn("hello world");
btn.resize(200,100);
btn.show();
return app.exec();
}

我将其放在D:\Workspace\qt\hello,你可以放在任何你喜欢的目录下,但最好不要包含中文目录.

然后win+r 输入cmd回车,进入控制台,进入到源代码目录下

qmake –project

这时候会生成一个“目录名.pro”的文件,我这里生成的是hello.pro

打开这个文件,因为Qt5的qapplication在QtWidgets模块里,和Qt4不一样,Qt4的qapplication在QtGui模块里,因此需要加上如下配置项:

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

然后执行

qmake hello.pro

可以看到已经生成了Makefile文件

接下来就是根据Makefile文件构建应用程序了,执行程序:

mingw32-make

如果没有报错,说明编译成功了!

进入release目录下可以看到两个文件:hello.exe  helloworld.o

直接运行hello.exe就可以看到效果了,一个可爱的200x100大小的巨型按钮窗口出现了。

 

问题解决:

问题一:‘qmake’不是内部或外部命令,也不是可运行的程序或批处理文件。

这个问题很好解决,主要是因为环境变量没有配置好。Win+R输入SystemPropertiesAdvanced

在path后面追加两条数据,并以英文分号“;”分隔。分别是

(1)D:\Qt\Qt5.4.0\5.4\mingw491_32\bin; 这个目录是我Qt的安装目录,需要根据自己的安装情况设置,设置这个目录主要是为了使用qmake命令,也就是说你需要配置的目录就是qmake.exe所在的目录路径。

(2)第二个是mingw32-make.exe的路径,我的是在D:\Qt\Qt5.4.0\Tools\mingw491_32\bin;两个目录配置好之后,从新打开cmd窗口就会生效了。

问题二:mingw32-make执行错误

D:\Workspace\qt\hello>mingw32-make
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory 'D:/Workspace/qt/hello'
g++ -c -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_NO_DEBUG -DQT_GUI
_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN -I. -I'.' -I'../../../Qt/Qt5.4.0/5.4/mingw491_32/include' -I'../../../Qt/Qt5.4.0/5.4
/mingw491_32/include/QtGui' -I'../../../Qt/Qt5.4.0/5.4/mingw491_32/include/QtCore' -I'release' -I'../../../Qt/Qt5.4.0/5.
4/mingw491_32/mkspecs/win32-g++' -o release/helloworld.o helloworld.cpp
helloworld.cpp:1:23: fatal error: QPushButton: No such file or directory
#include <QPushButton>
^
compilation terminated.
Makefile.Release:121: recipe for target 'release/helloworld.o' failed
mingw32-make[1]: *** [release/helloworld.o] Error 1
mingw32-make[1]: Leaving directory 'D:/Workspace/qt/hello'
makefile:34: recipe for target 'release' failed
mingw32-make: *** [release] Error 2

这个错误主要是Qt的版本引起的,Qt5的QApplication在QtWidgets模块里,Qt4的qapplication在QtGui模块里。

因此需在.pro文件中加入:

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

这两行即可。

总结:

总的流程其实很简单:

(1)编写源文件

(2)qmake –project

(3)修改*.pro

(4)qmake  *.pro

(5)mingw32-make

Qt5 从头学(2)--手动构建HelloWold的更多相关文章

  1. Qt5 从头学(1)-- 环境

    对我来说MFC太过麻烦了,同样是桌面开发工具,Qt就完全不一样了.Qt使用C++语言可以轻松实现"一次编写,到处编译"的跨平台性能,并且可以做出很多炫酷的界面效果.目前支持几乎所有 ...

  2. Linux从头学02:x86中内存【段寻址】方式的来龙去脉

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  3. Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  4. Linux从头学07:中断那么重要,它的本质到底是什么?

    作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...

  5. 从头学Android系列

    从头学Android系列 http://blog.csdn.net/worker90/article/category/888358

  6. docker之手动构建新的镜像

    转自:https://www.cnblogs.com/jsonhc/p/7766561.html 查看本地现有镜像: [root@docker ~]# docker images REPOSITORY ...

  7. NDK plugin来构建JNI项目(相对于手动构建)

    http://blog.csdn.net/codezjx/article/details/8879670 1.添加ndk环境支持 Android Tools -> Add Native Supp ...

  8. Jenkins持续集成企业实战系列之Jenkins手动构建-----04

    注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.    最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...

  9. maven 手动构建项目

    maven 手动构建项目 在空目录下面: D:\test>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archet ...

随机推荐

  1. Atitit.html css  浏览器原理理论概论导论attilax总结

    Atitit.html css  浏览器原理理论概论导论attilax总结 1.1. 浏览器是怎样工作的:渲染引擎,HTML解析(连载二)1 2. 5.1.1 DOM标准 1011 3. <We ...

  2. 使用tornado的gen模块改善程序性能

    之前在公司的一个模块,需要从另一处url取得数据,我使用了Python的一个很著名的lib,叫做requests.但是这样做极大的降低了程序的性能,因为tornado是单线程的,它使用了所谓的reac ...

  3. UIBarButtonItem-添加自定义Left或者Right按钮

    为UINavigationController添加UINavigationItem,我们可以这样写:   1.添加返回导航按钮backBarButtonItem   1.用系统自带的返回按钮 UIBa ...

  4. 努力学习 HTML5 (4)—— 浏览器对语义元素的支持情况

    经过上一节学习,我们已经建立一个结构良好的页面,如果在旧版的 IE 浏览器中浏览可能这些语义元素无法显示. 毕竟这些语义元素什么也不做,要支持它们,只要让浏览器把它们当做普通的 <div> ...

  5. U盘安装ubuntu,一直提示start booting from usb device…[转]

    找到U盘中syslinux文件夹下的syslinux.cfg文件,在default vesamenu.c32前面加一个#号就可以了. 我的syslinux.cfg文件修改后如下,够简单吧!!!!建议用 ...

  6. Android 解压boot.img

    其实解压.打包boot.img没什么难度一看就会咯!!   1.先下附件:工具. 点击打开链接 6.0 KB, 下载次数: 60)      解压到bin文件夹里,方便以后使用.   2.解压boot ...

  7. nodejs express 框架解密5-视图

    本文档是基于express 3.4.6 的 在我们的代码中,渲染模板大致是这样写的 exports.index = function(req, res){ res.render('index', { ...

  8. vs2010 使用vs online账号 需要安装的插件

    VS10SP1-KB2662296.exe http://pan.baidu.com/s/1qWDpEG0 vs2010 需要先升级到SP1

  9. nginx 反向代理 与 Apache backend的配置联合配置

    nginx 反向代理 与 Apache backend的配置联合配置: 说明: nginx 将http映射到Apache上的特定子目录. 配置方法步骤: 1.  设置域名, 子域名映射到指定服务器ip ...

  10. VirtualBox不能为虚拟电脑 Ubuntu 打开一个新任务

    今天在用Vbox中的Ubuntu系统准备测试Python代码时,Vbox报了一个错误:"不能为虚拟电脑 Ubuntu 打开一个新任务".因为之前用的时候还好好的,也不知道是不是最近 ...