转载:http://hi.baidu.com/cyclone/blog/item/d299af511bed309f8c5430c3.html
不妨先看个例子吧:
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
int main(int argc, char** argv)
{
QCoreApplication app(argc, argv);
qDebug()<<"hello qt!";
app.exec();
}
如何编译这个程序呢?我们知道,构建一个C++程序:无非是编译(包括编译预处理)、链接 这几步。
- 编译时,我们需要让预处理器能找到我们的头文件(即:指定头文件路径)
- 链接时,我们需要让链接器能找到我们需要的库
对这个程序来说呢,也就是,指定
头文件路径
|
$QTDIR/include
|
库文件
|
QtCore4.lib(或相应的其他形式)
|
答案就简单了(分别采用g++和msvc进行编译):
g++ main.cpp -Ie:\Qt\4.7.0\include -o main -Le:\Qt\4.7.0\lib -lQtCore4
或
cl main.cpp -ID:/Qt/4.7.0/include -Femain -link -LIBPATH:D:/Qt/4.7.0/lib QtCore4.lib
参数的含义可参考:从 C++ 到 Qt
头文件 库文件
我们知道,在C++中,使用第三方库的过程,就是包含头文件、链接库文件的过程:
使用QString
|
需要 -lQtCore4
|
使用QWidget
|
需要 -lQtGui4
|
使用QFtp
|
需要 -lQtNetWork4
|
使用QWebView
|
需要 -lQtWebKit4
|
...
|
...
|
我们接下来先简单看一下Qt的头文件和库文件,然后看看qmake是如何处理的:为什么我们不需要在.pro文件内指定这些头文件路径和库文件
Qt头文件
估计不少对C、C++不是那么熟的同仁,会对Qt中的下面各种写法感到迷惑(比如我们要用到 QString 的头文件):
不过咱们都是学过C、C++的,都知道尖括号或双引号内就是一个头文件的文件名。所以理解起来应该没什么难度,转来转去无非是下面的几个文件:
所以呢?当你
使用头文件
|
需要指定头文件路径
|
#include<QString>
|
$QTDIR/include/QtCore
|
#include<QtCore/QString>
|
$QTDIR/include
|
有些人喜欢用#include<QtCore>这种写法,这是头文件在哪儿呢?它的全路径是
$QTDIR/include/QtCore/QtCore
与此类似
使用头文件
|
需要指定头文件路径
|
#include<QtCore>
|
$QTDIR/include/QtCore
|
#include<QtGui>
|
$QTDIR/include/QtGui
|
#include<QtScript>
|
$QTDIR/include/QtScript
|
...
|
...
|
不清楚你注意到没?如果你坚持使用 #include<QtCore/QString> 这种写法,你只需要一个头文件路径,这就是$QTDIR/include
Qt库文件
和头文件比起来,库文件似乎就比较简单了。因为它们直接在下面的路径下
路径简单,可是库呢?
- 动态库(共享库)、静态库(归档库)
- 不同平台下有不同的后缀。 .dll, .so, .dylib, .lib, .a
- 带调试信息,不带调试信息的库
- windows下的动态库需要引导库
以windows下MSVC编译的Qt4为例:
- 静态编译
-
$QTDIR/lib/QtCore.lib
-
$QTDIR/lib/QtCored.lib
- 动态编译
-
$QTDIR/lib/QtCore4.lib
-
$QTDIR/lib/QtCore4.dll
-
$QTDIR/lib/QtCored4.lib
-
$QTDIR/lib/QtCored4.dll
qmake
用qmake管理我们前面的例子的话,我们只需要写一个简单 .pro 文件
CONFIG += console
QT -= gui
SOURCES += main.cpp
这样一来,qmake是如何知道需要哪些头文件和库文件的呢?
其实,这儿省略了两行代码(因为是默认值,所以可以不写,但对我们理解这个例子至关重要)
CONFIG += qt
QT += core
那么这些东西如何和前面的东西联系起来呢?
首先
CONFIG += qt
将使得最终包含:
-
头文件路径
|
$QTDIR/include
|
库文件路径
|
$QTDIR/lib
|
其次
QT += core
将对Qt相关的路径进一步细化
-
头文件路径中
|
$QTDIR/include/QtCore
|
链接需要的库
|
QtCore4.lib
|
编译预处理的宏
|
QT_CORE_LIB
|
看,现在头文件路径和库文件都有了,而且,无论头文件写成 QString 还是 !QtCore/QString 都能被找到。
再次,由于在 .pro 文件内
- CONFIG 中默认包含 qt
- QT 中默认包含 core
这使得这点变得更加隐藏
QT
举个例子,如果我们在程序中用了
#include <QFtp>
...
QFtp xxx;
...
那么我们将需要
-
指定头文件路径
|
$QTDIR/include/QtNetwork
|
指定要链接的库
|
QtNetWork4.lib
|
这两个正是下面的语句所做的:
QT += network
- 除此,该语句还定义宏 QT_NETWORK_LIB
哈哈哈,发现下面问题的答案了没:
如何启用一个模块
当启用一个模块时,我们
- 要么是修改 CONFIG 变量
- 要么是细化 QT 变量
- 而有的模块,两者均可。
修改QT
这是最常规的,QtCore、QtGui、QtNetWork 等等
-
使用Core模块
|
QT += core
|
使用Gui模块
|
QT += gui
|
使用NetWork模块
|
QT+=network
|
修改CONFIG
比如 QAxContainer 模块
CONFIG += qaxcontainer
两者均可
比如 QtTest 模块:
我们可以使用
CONFIG += qtestlib
也可以使用
QT += testlib
两者的区别是,后者会定义 QT_TESTLIB_LIB 这样宏(同QT+= core gui等效果一样),前者则不会定义这个宏。
分享到:
相关推荐
qmake可以在安装Qt时默认安装,也可以手动安装。手动安装qmake需要设置环境变量QMAKESPEC和QTDIR。QMAKESPEC环境变量需要设置为系统的平台和编译器的组合,例如win32-msvc或solaris-g++。QTDIR环境变量需要设置到Qt...
config global qdoc qmake qt3d qtandroidextras qtassistant qtbluetooth qtcharts qtcmake qtconcurrent qtcore qtdatavisualization qtdbus qtdesigner qtdistancefieldgenerator qtdoc qtgamepad ...
总的来说,"qt5.9.2arm移植配置文件--qmake configre_sh.zip"的解压内容qmake.conf和qt5config.sh是针对ARM架构移植Qt 5.9.2的关键文件,涉及到对编译环境、编译选项和依赖库的细致调整,确保Qt能够在目标平台上正确...
qmake CONFIG+="debug_and_release build_all" make After building, install the module to your Qt directory: make install If you want to uninstall the module: make uninstall Building as a ...
### qmake使用指南详解 #### 一、qmake概述与作用 qmake是Qt框架下的一款强大且灵活的构建工具,旨在简化Qt应用程序的编译流程。...无论是构建简单的应用还是复杂的跨平台软件,qmake都是不可或缺的工具之一。
此外,通过 `CONFIG += qt` 指示这是一个 Qt 项目,这样 qmake 会自动包含必要的 Qt 库和工具。 #### 四、高级用法 ##### 4.1 添加特定平台的源文件 有时,我们需要为不同的平台添加特定的源文件。这可以通过条件...
#### 二、qmake的特点与优势 1. **跨平台支持**:qmake 支持多种操作系统(如 Windows、Linux、macOS 等)和编译器(如 GCC、Clang、MSVC 等)。 2. **简化构建过程**:通过使用 .pro 文件,开发者可以轻松管理项目...
QMake 是 Qt 开发框架中的一个重要工具,用于自动化构建过程,帮助开发者生成项目文件,使得构建应用程序变得更加简单。本篇将深入探讨 QMake 的使用技巧和常见问题的解决方法。 ### 1. **QMake 基础** QMake 是一...
qmake的灵活性和强大之处在于,它可以根据项目文件中的设置自动生成适应不同平台的构建文件,无论是简单的单文件项目还是大型的复杂工程,都能轻松应对。开发者只需要专注于编写代码,而无需过多关注底层构建细节,...
8. **国际化与本地化**:如果`config`涉及到用户界面的设置,那么它可能包含了多语言支持的实现,使用QT的翻译工具如`qmake`和`lrelease`处理`.ts`和`.qm`文件。 9. **调试与测试**:在QT Creator中,可以方便地...
通过以上知识点的学习和实践,开发者可以从零开始掌握使用C++和QT5进行跨平台界面编程的全过程,包括开发环境的搭建、基本项目的创建与配置、界面设计、第三方库的引入与管理、编译过程的自动化等方面。这对于希望...
qmake -spec win32-g++ "CONFIG+=release" "CONFIG-=debug" qt_xlsx.pro ``` 这将根据你的mingw_64环境生成适用于64位系统的Makefile。 2. 执行编译过程: ``` make -j4 ``` `-j4`参数表示使用4个线程并行...
- 命令:`sudo /opt/Qt5.12.7/5.12.7/gcc_64/bin/qmake mysql.pro` - 这会在当前目录下创建debug和release两个版本的Makefile。 2. 使用`make`命令编译所需的共享动态库: - 对于调试版本:`make -debug` - ...
配置变量CONFIG则用来指定编译选项和链接的库,如debug、release、qt、thread等。 高级操作技巧涉及更复杂的项目配置。例如,你可以使用SUBDIRS模板来管理子目录中的项目,每个子目录都会生成自己的Makefile并进行...
Qt 提供了一系列的功能模块来支持开发者的需求,其中之一就是 QtDBus。QtDBus 是用于实现基于 DBus 协议的进程间通信 (IPC) 的组件。尽管 QtDBus 默认支持 Unix 类操作系统,但 Windows 用户同样希望能够在 Windows ...
2. **平台和编译器适配**:qmake能识别多种操作系统和编译器组合,如Windows与Microsoft Visual Studio、Solaris与g++等。 3. **Qt支持**:qmake特别关注Qt库的构建需求,自动包含moc(Meta-Object Compiler)和uic...
### Qt5.2.0配置MySQL5.6详解 在使用Qt进行开发的过程中,经常会遇到与数据库交互的需求,其中MySQL是最常用的数据库之一。...此外,了解这些步骤也有助于更好地理解和掌握Qt与MySQL之间的交互机制。
`qmake`是Qt开发框架中的一款重要工具,主要用于生成Makefile或项目文件,简化了构建Qt应用的复杂性。本文将深入探讨`qmake`的使用技巧,帮助开发者更高效地管理和构建Qt项目。 首先,`qmake`的安装通常伴随着Qt的...