当前位置: 首页 > news >正文

控制台手动编译Qt5程序

转自:http://www.cnblogs.com/csulennon/p/4479236.html

在上一篇随笔中已经搭建好了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

image

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

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

image

然后执行

qmake hello.pro

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

image

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

mingw32-make   【此时编译器mingw32会自动在当前目录下查找Makefile文件并根据Makefile文件内容编译链接相应的文件】    

image

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

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

image

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

image

 

问题解决:

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

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

image

image

在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
复制代码

image

这个错误主要是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

转载于:https://www.cnblogs.com/hnfxs/p/5393834.html

相关文章:

  • 创建NetWorkDataset---Shapefile篇
  • 获取验证码按钮点击后,一分钟内不可继续点击
  • Delphi Canvas的FillRect(const Rect: TRect) 函数的作用
  • B+/-Tree原理及mysql的索引分析
  • 关闭Rootless机制
  • 图像缩放算法
  • Effective C++笔记(三):资源管理
  • IOS开发之远程推送
  • Set的用法
  • 安卓手持智能POS端上能扫描开单的软件-店面销售开单系统
  • 等式 hash
  • ARDUINO W5100 WebClient 测试
  • iOS9横竖屏设置的处理方法
  • spark 性能优化
  • 第一阶段冲刺个人博客08
  • 【Amaple教程】5. 插件
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Babel配置的不完全指南
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • IDEA常用插件整理
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Median of Two Sorted Arrays
  • MySQL QA
  • python学习笔记-类对象的信息
  • React+TypeScript入门
  • vue 配置sass、scss全局变量
  • 从输入URL到页面加载发生了什么
  • 仿天猫超市收藏抛物线动画工具库
  • 回顾 Swift 多平台移植进度 #2
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 我是如何设计 Upload 上传组件的
  • 写代码的正确姿势
  • 用quicker-worker.js轻松跑一个大数据遍历
  • Android开发者必备:推荐一款助力开发的开源APP
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​用户画像从0到100的构建思路
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #include
  • (C++)八皇后问题
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (四)linux文件内容查看
  • (一) storm的集群安装与配置
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)母版页和相对路径
  • .apk文件,IIS不支持下载解决
  • .libPaths()设置包加载目录
  • .net core 依赖注入的基本用发
  • .NET Framework .NET Core与 .NET 的区别