使用Qt作为C++的标准库


类型:C++ & Qt4,创建时间:July 31, 2014, 11:17 a.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/95/。

目前大家都使用cpp的stl和boost作为cpp的标准库。不过个人觉得stl和boost用起来不是很爽。不如用Qt。但,很多人觉得Qt这个库太大,而且如果不使用Qt的GUI也安装一大堆没用的dll——其实这都不是问题,我们可以在编译Qt的时候使用no-gui选项,告诉Qt我们只对它的非GUI部分感兴趣,避免编译与安装大量无用的Qt组件。

接下来我在vs2010 express版本里面做个实验。使用的是qt5.3.1。首先到[http://lt.mirrors.sohu.com/qt-all/official_releases/qt/5.3/5.3.1/submodules/]下载qtbase-opensource-src-5.3.1.zip,这是for windows版本,里面带了一个configure.exe,扩展名为.tar.gz的压缩包里面没有。

我把它解压到d:\qtbase,打算把它安装到c:\qt5里面。编译安装三部曲:./configure && make && make install,命令行:

d:\qtbase > configure.exe -prefix c:/qt5 -release -opensource -shared -no-ltcg -nomake tools -nomake examples -no-gui -no-icu
d:\qtbase > jom
d:\qtbase > jom install

完成以后到c:/qt5里面看看,现在不会发现有庞大的qt库了。整个qtcore大约占用了140m,其中有一个Qt5Bootstrap.lib居然有120m,不知道是什么东东。为什么会这么大呢?删掉以后整个Qt库只剩下20m,也可以跑起来。高手说说这个东西是干啥用的?

接下来我们就可以像普通的cpp库那样子使用Qt了。下面是一个例子:

//testqt.cpp
#include <QtCore>

int main(int argc, char **argv) {
    qDebug() << QString::fromLocal8Bit("中文");
    return 0;
}

编译这个文件所使用的命令行:

d:\projects\testqt > path %PATH%;c:\qt5\bin
d:\projects\testqt > cl -I c:\qt5\include\QtCore -I c:\qt5\include\ testqt.cpp /link c:\qt5\lib\Qt5Core.lib
d:\projects\testqt > testqt.exe

因为我们编译安装的Qt还附带了qmake系统,所以我们还可以使用qmake管理工程,或者使用Qt的moc预处理工具处理从QObject派生的类型,这是使用Qt的signal/slot的基础。因为这里与Qt的正常使用流程完全一样,所以这里就不演示了,只是需要注意在.pro文件里面添加这两行:

QT -= gui
CONFIG += console

好吧,上个源代码:

//main.cpp
#include <QCoreApplication>
#include <QTimer>
#include <QDebug>
#include "fish.hpp"

void Fish::quit()
{
    qDebug() << "Fish::quit() called";
    QCoreApplication::instance()->quit();
}

int main(int argc, char **argv) {
    QCoreApplication app(argc, argv);
    Fish f;
    QTimer::singleShot(1000, &f, SLOT(quit()));
    return app.exec();
}

//fish.hpp
#include <QObject>

class Fish:public QObject
{
    Q_OBJECT
public slots:
    void quit();
};

//testqt.pro
TEMPLATE = app
TARGET = testqt
INCLUDEPATH += .
QT -= gui
CONFIG += console

# Input
HEADERS += fish.hpp
SOURCES += main.cpp

后记一个:据说不编译qmake/moc这些工具也可以?

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/95/。


暂时还没有任何评论。


何不来发表一下您对本文的看法(使用Markdown语法,分段空两行):