学习《C++ GUI QT4编程》一开始作者就是用的命令行编译的方式,对于我这种从来没用过命令行的IDE人,颇感麻烦,以前连个cmd下的cd命令都是时而会用时而不会,虽然有心感觉应该学习一下,但是从来都是战胜不了借口。
终于看到第二章创建对话框时,IDE用不下去了,是该学习一下命令行编译的时候了。
开始先要设置好mingw路径的环境变量,否则会找不到编译命令。
首先创建的是一个纯C++的cout输出程序,不涉及GUI的,最简单的:
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
cout<<"this is a pure console app without GUI"<<endl;
return 0;
}
然后命令行输入:
qmake -project
qmake purecpp.pro
mingw32
【我把mingw32-make.exe改为了mingw32.exe,我的makefile生成的exe文件路径是在release文件夹下】
一切OK,但是再输入:
release\purecpp却什么也没有出来???程序应该是已经运行了,但是没有出现字符串!
使用Creator创建了一个控制台的程序,发现pro文件中有这么一句:CONFIG += console,然后网上搜了一下,要输出到控制台需要加入这一句,后面还有一句是CONFIG -= app_bundle,据说是跟mac有关的,但是不加这句也没问题。
所以如果想要输出控制台就要在pro文件中加入这一句:
CONFIG += console
然后重新输入qmake purecpp.pro
mingw32编译之后,再运行就可以了。
【注意不要从qmake -project开始了,否则运行这一句又生成了工程文件pro,上面刚刚加入的依据config就没了,前功尽弃!】
控制台的输入输出如下:
控制台程序OK了,下一步是GUI的,像书上一样首先使用QT designer随便设计了一个窗体对话框:
保存什么的跟书上的一样,我的是qtdesign.ui
然后在同一目录下创建了一个main.cpp
#include <QtWidgets/qapplication>
#include <QtWidgets/qdialog>
#include "ui_qtdesign.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Ui::TestDlg ui;
QDialog *dlg = new QDialog;
ui.setupUi(dlg);
dlg->show();
return app.exec();
}
【也可以在mingw32编译之前创建,根据ui文件生成的h文件和类来写】
然后就是上面的那一套命令行了,书上说的是qmake会根据ui文件自动调用uic生成对应的h文件,不过实际却没有产生h文件,需要自己调用uic来生成。
如下图是只调用qmake的后果:
可以看到文件夹中根本没有产生.h文件,mingw编译的结果也是出错,所以自己uic编译生成h文件:
这下有了h文件了,不过编译还是不对的,生成了一大堆的链接错误,因为我们使用了widgets模块,而pro中没有,所以需要在pro中手动加入:
QT += widgets
这时再进行mingw编译结果:
运行的结果同时显示出来,与设计的是一样的,只是没有加入响应,点击按钮的话是没有反应的,后面的响应就可以按照书上讲的一步一步的加入了。
---------------------------------------------------
后记:这次学习了一点点的使用命令行编译QT工程的知识,虽然只是两个小例子,但是自己却断断续续摸索了一两天,可谓摸着石头过河,深浅都知道了,这样学习虽然有点慢但是学到的确实挺深刻的。
使用命令行有个缺点就是需要自己动手修改pro文件,进行配置,这个在qmake的help中有些说明:
-project中的Note中提到了pro文件需要自己设置。一些配置项不熟的话还是有点麻烦的,这次只是学习了一点:包含模块QT,配置CONFIG的东西,以后应该慢慢的学习pro的其他配置项。
在使用中摸索学习,摸着石头过河!