Qt中的.pro文件

《Qt Creator 快速入门》首先介绍了项目目录中各个文件的含义。建立一个最简单的helloworld程序,则helloworld.pro是项目文件,其中包含了项目相关信息、helloworld.pro.user包含了与用户有关的项目信息、hellodialog.h是类的头文件、hellodialog.cpp是类的源文件、main.cpp包含了main()主函数、hellodialog.ui设计师设计的界面对应的界面文件。然后建立一个空的Qt项目,再添加main.cpp文件,代码如下:

#include <QApplication>

#include <QDialog>

#include <QLabel>

#include <QTextCodec>

int main(int argc, char *argv[])

{

    QApplication a(argc, argv);

    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    QDialog w;

    w.resize(400, 300);

    QLabel label(&w);

    label.move(120, 120);

    label.setText(QObject::tr("Hello World! 你好Qt!"));

    w.show();

    return a.exec();

}

Helloworld.pro是自动生成的。代码如下:

SOURCES  += \

Main.cpp

编译时会报错:C1803:Cannot open include file:’QApplication’ :No such file or directory。

其实书中对.pro文件的介绍太笼统,.pro文件用来设置编译或者链接的变量,以便用qmake生成相应的Makefile文件。

TEMPLATE:这个变量是用来定义你的工程将被编译成什么模式。如果没有这个设置,系统将默认编译为application。

TEMPLATE=app表示这个project将被编译成一个应用程序(application)

lib(生成库的Makefile)

subdirs(生成有多级目录管理的Makefile),

vcapp,vclib,vcsubdirs(对应Windows下面VC)

TARGET:生成最后目标的名字

DESTDIR:指定生成目标的路径

DEPENDPATH:工程的依赖路径

INCLUDEPATH:这个用来指定工程要用到的头文件路径

SOURCES:工程需要的源文件

HEADERS:工程所需要的头文件

FORMS:工程要用到的ui文件(ui文件时用QT设计器生成的)

LIBS:加载动态库。LIBS+=./mitab/libmitab.so

TRASHLATIONS:加载要用到的语言翻译*.ts文件

 

RESOURCES:加载要用到的资源*.qrc文件。

CONFIG:告诉qmake应用程序的配置信息。

这个变量可以用来指定是生成debug模式还是release模式,也可以都生成。

也可以用来打开编译器警告(warn_on输出尽可能多的警告信息)或者

关闭(warn_off -编译器会输出尽可能少的警告信息)。还可以用来配置要Qt加载库。

想要qt+多线程:CONFIG+=qt thread

注意:这里使用+=,而不是=,是因为我们希望添加我们的配置选项到任何一个已经存在的文件中。

Eg:

CONFIG+=debug_and_release

CONFIG(debug,debug|release){

TARGET= hello

DESTDIR= ./debug

}else{

TARGET= hello

DESTDIR= ./release

}

UI_DIR:UIC将ui转化为头文件所存放的目录

RCC_DIR:RCC将qrc文件转化为头文件所存放的目录

MOC_DIR:MOC命令将含Q_OBJECT的头文件转换为标准的头文件存放的目录

OBJECTS_DIR:生成的目标文件存放的目录

DEFINES:应用程序所需的额外的预处理程序定义的列表#在.h文件中就可以使用:#ifdefinexx_xx_xxx

LIBS += -L folderPath  //引入的lib文件的路径  -L:引入路径

Release:LIBS+= -L folderPath // release 版引入的lib文件路径

Debug:LIBS+= -L folderPath // Debug 版引入的lib文件路径

RC_FILE = xxx.icns   //程序图标

QT是跨平台的,所以我们在不同的平台上用同一个pro文件,这要加入有关平台的信息。

windows是win32,Linux平台是unix。

Eg:

在Windows和Linux的动态库文件格式是不一样的。一个是lib文件一个是so文件

win32:LIBS+= ./mitab/mitab_i.lib

unix:LiBS+= ./mitab/libmitab.so

eg:

win32{

SOURCES+= hello_win.cpp //win平台

}

unix{

SOURCES+= hello_win.cpp //unix/linux平台

}

 以通过在其它任何一个变量的变量名前加$$来把这个变量的值分配给当前的变量。例如:

MY_DEFINES= $$DEFINE  #将DEFINE的值分配给MY_DEFINES

 

再回到我们的问题上。我们需要再.pro中加入QT += widgets。

关于为什么要在.pro里面加上Qt += widgets知乎上有个很好的回答:

在pro里写 qt+=widgets 表示引入QtWidget这个module,qmake会在帮你生成makefile的时候,设置好include path 和 lib path,在link时候设置好libs。

而仅在源代码里 include <QApplication>仅是引入声明,但是没有lib,所以链接时会出错。

当然,我们可以批评C++这种源自上世纪70年代的头文件和lib分离的设计是过时的不合理的,现代语言基本都采用package管理,用import解决了。

但是我们既然还在用C++,就要接受这种设计,把它搞明白。

此时,会报:C2039: ‘setCodeForTr’: is not a member of ‘QTextCode’。这是因为Qt5取消了QTextCodec::setCodecForTr()和QTextCodec::setCodecForCString()这两个函数。我们先注释掉:

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

label.setText(QObject::tr("Hello World! Qt!"));

这样,程序就可以编译通过并运行了。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LM Wang

感恩这个世界~

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

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

打赏作者

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

抵扣说明:

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

余额充值