Qt(Mingw环境)中编译和导入QJSon库
之前尝试在QJSon的网站和其他地方下载的QJSon库,进行编译,始终无法生成正确的可供MingW使用的库文件。
因此,在Google、百度、Bing之外我选择了一款不常用的搜索引擎:Duckduckgo,链接:
经过输入关键词“Qt QJSon”之后,找到了NOKIA的一篇文档,在此缅怀一下,昔日的巨人,并祝福它可以振作起来。附上链接:
http://projects.developer.nokia.com/QJson/browser

复制图中高亮部分的链接到剪切板,
之后在你的本地磁盘创建一个文件夹:
例如本人使用:F:\softwares\YunSave\Project\QJSon其中QJSon为创建的文件夹,
在这个文件夹中,启动TortoiseSVN的检出:

输入上面的地址,进行检出。会得到相应的源代码以及QJSon的脱机文档。如下图所示:

注意:全新检出的工程中是不包含上图中的QJSon.pro工程文件的,因此我们可以手动创建一个QJSon.pro文件,文件中加入如下工程代码:
TEMPLATE = lib
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
include(./json.pri)
LIBS += -lws2_32
启动QtCreator,导入上面的工程:

此时,请选择启动编译的“发布”选项:

设置完成之后,既可以选择“运行”。运行完成:

之后找到上图中的release文件夹:

将release文件夹里面的libQJSon.a放到<Qt dir>\lib 目录中,例如本人将它放在了:
D:\QtSDK\Desktop\Qt\4.8.1\mingw\lib 目录中,
再在release文件夹里面找到QJSon.dll文件,将它放到<Qt dir>\bin目录中,本人放在了:
D:\QtSDK\Desktop\Qt\4.8.1\mingw\bin目录中。

接下来,找到<Qt dir>\include目录,我本人可能要找到:
D:\QtSDK\Desktop\Qt\4.8.1\mingw\include这个目录,
在这个include目录中创建一个名为QJSon的文件夹,然后将之前检出的代码目录(上面提到的F:\softwares\YunSave\Project\QJSon)中的所有头文件(*.h和*.hh)都拷贝到新创建的
D:\QtSDK\Desktop\Qt\4.8.1\mingw\include目录中。
至此,外部库(外裤,呵呵)的导入已经完成。
接下来我们可以试着写个程序来测试一番了!
创建一个Qt控制台工程:
工程名例如QJSonTest:
打开你的QJSonTest.pro文件,并在最后加入一行内容:“LIBS += -lqjson”
完了,可以编写main.cpp进行测试,代码如下:
#include <QtCore/QCoreApplication> #include <QVariant> #include <QDebug> #include <QJSon/qjson.h> #include <QJSon/serializer.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QJson::QJson parser(&a); bool ok; QString json = "{\"encoding\":\"UTF-8\", \"plug-ins\":[\"python\",\"c++\",\"ruby\"], \"indent\":{ \"length\":3, \"use_space\":true }}"; //!< 注意没有回车 QVariantMap result = parser.parse(json.toAscii(),&ok).toMap(); if (!ok) { qDebug("An error occurred during parsing"); return 0; } qDebug() << "encoding:" << result["encoding"].toString(); qDebug() << "plugins:"; foreach (QVariant plugin, result["plug-ins"].toList()) qDebug() << "\t-" << plugin.toString(); QVariantMap nestedMap = result["indent"].toMap(); qDebug() << "length:" << nestedMap["length"].toInt(); qDebug() << "use_space:" << nestedMap["use_space"].toBool(); return a.exec(); }
PS:打开你的QJSonTest.pro文件,并在最后加入一行内容:“LIBS += -lqjson”这一步是尤为重要的。

浙公网安备 33010602011771号