Qt学习笔记3:QT项目管理文件(.pro)解析及命令行编译Qt项目


1. Qt项目文件目录树

在 Qt Creator 中新建一个 Widget Application 项目 qt_demo2,在选择窗口基类的页面选择 QWidget 作为窗体基类,并选中“Generate form”复选框。创建后的项目文件目录树如下图所示。
在这里插入图片描述
现在来看编辑模式边栏的项目视图,点开头文件、源文件、界面文件三个虚拟目录,可以看到 widget.h 、main.cpp、widget.cpp 、widget.ui ,还有 qt_demo2.pro 项目文件,这个项目必要的代码文件就这五个,项目视图里三个目录是虚拟的,但这五个文件都是真实的。

  • 项目管理文件 qt_demo2.pro,存储项目设置的文件。
  • 主程序入口文件 main.cpp,实现 main()函数的程序文件。
  • 窗体界面文件 widget.ui,一个 XML 格式存储的窗体上的元件及 其布局的文件。
  • widget.h 是所设计的窗体类的头文件,widget.cpp 是 widget.h 里 定义类的实现文件。C++ 中,任何窗体或界面组件都是用类封装的,一个类一般有一个头文件(.h 文件)和一个源程序文件(.cpp 文件)。

2. 项目管理文件解析(.pro)

后缀为".pro"的文件是项目管理文件,双击打开项目管理文件,文件内容如下:

#-------------------------------------------------
#
# Project created by QtCreator 2020-09-23T16:06:11
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qt_demo2
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        widget.cpp

HEADERS += \
        widget.h

FORMS += \
        widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

井号 # 打头的是注释,表明这个 pro 文件是由 QtCreator 创建的,QtCreator 创建的 pro 文件和 qmake 命令创建的 pro 文件有区别,而且 QtCreator 创建的 pro 文件兼容性更好,所以推荐是用 QtCreator 生成 Qt 项目并编辑和构建项目。

QT += core gui

这一句是为项目添加 core (QtCore,核心模块)和 gui (QtGui,基础绘图模块)两个 Qt 模块。core gui 是 Qt 用于 GUI 设计的类库模块,Qt 类库以模块的形式组织各种功能的类,根据项目涉及的功能需求,在项目中添加适当的类库模块支持。例如,如果项目中使用到了涉及数据库操作的类就需要用到 sql 模块,在 pro 文件中需要增加如下一行:

Qt +=sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

这句是个判断句法,如果 Qt 库的主版本号大于 4 ,比如 Qt5 ,那就添加新的 Qt 模块 widgets(QtWidgets,控件和窗口类模块),如果项目使用的是 Qt4,那么就不添加 widgets 模块。这句是为了兼容性而设计的,Qt4 时代,它的控件和窗口类集成在 gui 模块里,在 Qt5 才将 widgets 从 gui 里单独分离出来的。

TARGET = qt_demo2
TEMPLATE = app

TARGET 是指生成的目标程序名字,本项目生成的目标名字就是 qt_demo2 。TEMPLATE 是指项目生成模板,指明是生成应用程序 app 还是库文件 lib,还有其他类型的生成模板,不常用就不枚举了。

DEFINES += QT_DEPRECATED_WARNINGS

定义编译选项,QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的,那么编译器会发出警告。

CONFIG += c++11

使用C++11的标准进行编译。

后面的 SOURCES、HEADERS、FORMS 记录了项目中包含的源程序文件、头文件和窗体文件(.ui 文件)的名称。这些文件列表是 Qt Creator 自动添加到项目管理文件里面的,用户不需要手动修改。当添加一个文件到项目,或从项目里删除一个文件时,项目管理文件里的条目会自动修改。

3. 命令行编译Qt项目

随便写一段代码,保存为hello.cpp,并将其放入hello目录文件夹下。

#include<QApplication>
#include<QWidget>
int main(int argc,char ** argv)
{
    QApplication app(argc,argv);
    QLabel* label = new QLabel();
    label->show();
    return app.exec();
}

只需三行代码便可完成对Qt项目的编译:

qmake -project

执行完第一行代码后,会在hello文件夹下生成hello.pro。

qmake hello.pro

执行完第二行代码后,会在hello文件夹下生成一堆文件,最重要的是makefile文件。

make

第三行代码,mac和linux环境下用make,windows环境下是mingw32-make。此时执行make编译会报错,这是因为项目中用到了QWidget,所以要在.pro文件中加入QT += widgets,再次make编译即可。经测试,mac环境下编译生成的可执行文件能够正常运行,但是windows环境下会报无法定位到xxx.dll的错误,对于这类错误,暂时还未解决。

4. 参考文献

Qt项目管理文件(.pro)及其作用详解
Qt Creator基本使用方法学习

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i胡说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值