# QT YAML **Repository Path**: lainyu/qt-yaml ## Basic Information - **Project Name**: QT YAML - **Description**: QT加入外部库YAML-CPP步骤 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2021-06-10 - **Last Updated**: 2023-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: toolkit ## README # 在QT项目中加入外部lib(YAML) ## Requirements 1. QT项目 2. yaml-cpp: https://github.com/Manfredo-Ma/yaml-qt5 ## QT新建一个pri子项目文件 1. Add New... ==> General ==> Empty File, 新建文件 yaml/yaml.pri 2. 运行一次会看到yaml文件夹已经 ## 把Yaml-cpp用QT C++编译器编译成动态链接库 1. 把yaml-cpp中的 include, src文件复制到yaml文件夹中 2. 在yaml中加入yaml.pro文件 ```makefile # yaml.pro QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets QSSH_ROOT = $$PWD DESTDIR = $$PWD/lib TEMPLATE = lib DEFINES += YAML_LIBRARY #TARGET = $$qtLibraryTarget(YAML) CONFIG += c++11 include ($${PWD}/yaml.pri) ``` ```makefile # yaml.pri INCLUDEPATH += $$PWD/include SOURCES += \ $$PWD/src/binary.cpp \ $$PWD/src/contrib/graphbuilder.cpp \ $$PWD/src/contrib/graphbuilderadapter.cpp \ $$PWD/src/convert.cpp \ $$PWD/src/depthguard.cpp \ $$PWD/src/directives.cpp \ $$PWD/src/emit.cpp \ $$PWD/src/emitfromevents.cpp \ $$PWD/src/emitter.cpp \ $$PWD/src/emitterstate.cpp \ $$PWD/src/emitterutils.cpp \ $$PWD/src/exceptions.cpp \ $$PWD/src/exp.cpp \ $$PWD/src/memory.cpp \ $$PWD/src/node.cpp \ $$PWD/src/node_data.cpp \ $$PWD/src/nodebuilder.cpp \ $$PWD/src/nodeevents.cpp \ $$PWD/src/null.cpp \ $$PWD/src/ostream_wrapper.cpp \ $$PWD/src/parse.cpp \ $$PWD/src/parser.cpp \ $$PWD/src/regex_yaml.cpp \ $$PWD/src/scanner.cpp \ $$PWD/src/scanscalar.cpp \ $$PWD/src/scantag.cpp \ $$PWD/src/scantoken.cpp \ $$PWD/src/simplekey.cpp \ $$PWD/src/singledocparser.cpp \ $$PWD/src/stream.cpp \ $$PWD/src/tag.cpp ``` ## QT项目文件的改动 1. 加入 include($$PWD/yaml/yaml.pri) 2. 加入 DESTDIR = $$PWD/bin 3. 把测试用的yaml文件放入bin文件夹中 ## 测试 ```c++ #include "mainwindow.h" #include #include "yaml-cpp/parser.h" #include "yaml-cpp/eventhandler.h" #include "yaml-cpp/yaml.h" #include void test() { YAML::Node node = YAML::LoadFile("appconfig.yml"); qDebug() << node.size(); qDebug() << node["APP"].Type(); qDebug() << QString::fromStdString(node["APP"]["LANGUAGE"].as()); // 迭代器方式访问 - 想转Json的话估计可以利用这种方式回调返回一个组装好的 YamlValue for(YAML::const_iterator it= node["SERIAL"].begin(); it != node["SERIAL"].end();++it) { qDebug() << QString::fromStdString(it->first.as()) << ":" << QString::fromStdString(it->second.as()); } } int main(int argc, char *argv[]) { QApplication a(argc, argv); test(); return a.exec(); } ``` 可以通过。 > 10:37:52: Starting C:\Users\hp\QtProject\yamlTest\bin\yamlTest.exe ... 3 4 "ZH" "SERIAL_NUM" : "COM3" "BAUD_RATE" : "115200" "PARITY" : "NONE" "DATA_BIT" : "8" "STOP_BIT" : "1.0" "START_CMD" : "A2" "STOP_CMD" : "A1" "TIMER_INTERVAL" : "0.025" ## 使用 目录介绍: - yaml : 包含yaml-cpp的库和源码, 内部包含.pri 和 .pro文件 - .pri 为工程include文件, 在你的工程内部包含即可; 使用介绍: 1. 将yaml 拷贝到你的工程目录; 2. 在你的工程文件里面包含 yaml的过程include文件 /* 例如你将yaml放到你的工程目录下 */ include ($$PWD/yaml/yaml.pri) 3. 按你的需求进行使用即可 感谢 https://me.csdn.net/halo_hsuh 听我一言 小哥的帮助!