Qt5 从头学(2)--手动构建HelloWold
在上一篇随笔中已经搭建好了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 guigreaterThan(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的更多相关文章
- Qt5 从头学(1)-- 环境
对我来说MFC太过麻烦了,同样是桌面开发工具,Qt就完全不一样了.Qt使用C++语言可以轻松实现"一次编写,到处编译"的跨平台性能,并且可以做出很多炫酷的界面效果.目前支持几乎所有 ...
- Linux从头学02:x86中内存【段寻址】方式的来龙去脉
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- Linux从头学07:中断那么重要,它的本质到底是什么?
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- 从头学Android系列
从头学Android系列 http://blog.csdn.net/worker90/article/category/888358
- docker之手动构建新的镜像
转自:https://www.cnblogs.com/jsonhc/p/7766561.html 查看本地现有镜像: [root@docker ~]# docker images REPOSITORY ...
- NDK plugin来构建JNI项目(相对于手动构建)
http://blog.csdn.net/codezjx/article/details/8879670 1.添加ndk环境支持 Android Tools -> Add Native Supp ...
- Jenkins持续集成企业实战系列之Jenkins手动构建-----04
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- maven 手动构建项目
maven 手动构建项目 在空目录下面: D:\test>mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archet ...
随机推荐
- [读书笔记]C#学习笔记八:StringBuilder与String详解及参数传递问题剖析
前言 上次在公司开会时有同事分享windebug的知识, 拿的是string字符串Concat拼接 然后用while(true){}死循环的Demo来讲解.其中有提及string操作大量字符串效率低下 ...
- Cocoa编程开发者手册
Cocoa编程开发者手册(Objective-C权威著作超一流翻译阵容) [美] 奇斯纳尔(Chisnall,D.) 著 霍炬等 译 ISBN 978-7-121-12239-2 2013年7月出版 ...
- iOS---SQLite数据库框架之FMDB -Swift
SQLite数据库框架之FMDB 什么是FMDB? FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API.对比苹果自带的Core Data框架,更加轻量级 ...
- 每天一个linux命令(4):mkdir命令
linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. 1.命令格式: mkdir [选项] 目录... 2.命令 ...
- 关于多线程与CRITICAL_SECTION的使用
CRITICAL_SECTION 只能针对多线程进行锁定,在同一个线程中,是可以进入很多次的. 同一线程可以多次进入临界区. 在测试程序(多线程同时访问CADOAccess类的对象)中,辅助线程不论是 ...
- python中argparse模块的使用
有两个文件一个是 文件1:sync_shop_source_bimer.sh 文件2:sync_shop_source_bimer.py 在sync_shop_source_bimer.sh 中调用s ...
- Cluster群集
Cluster群集一般来讲有四个功能1. 冗余功能,就是说在这个群集中的任何一台机器出现本机或网络故障时,整个网络仍不中断,对外的服务也不中断,网络有多个路线可以走,服务器也可以相互代替.2.负载均衡 ...
- 如何编写一个PHP的C扩展
为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多.同样的运算代码,使用C来开发,性能会比PHP要提升数百倍.IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势. 另外C扩 ...
- 一致性hash和solr千万级数据分布式搜索引擎中的应用
互联网创业中大部分人都是草根创业,这个时候没有强劲的服务器,也没有钱去买很昂贵的海量数据库.在这样严峻的条件下,一批又一批的创业者从创业中 获得成功,这个和当前的开源技术.海量数据架构有着必不可分的关 ...
- Naked Search in service
public List<TplRelease> searchTplReleaseById(TplRelease tr)throws Exception{ DBOperator dbo = ...