当前位置: 首页 > news >正文

做团购的网站网络营销的目的和意义

做团购的网站,网络营销的目的和意义,wordpress使用手机号登录,网站建设及推广外包背景 本来想解析VS的项目配置文件(*.vcxproj)&#xff0c;配合cppclean来发现多余的#incldue。 结果发现低估了难度&#xff0c;VS会间接引入许多目录。 略有不甘&#xff0c;暂且作为一个解析XML文件的示例。 代码 VSProjectParser.h #include <QVector> #include…

背景

本来想解析VS的项目配置文件(*.vcxproj),配合cppclean来发现多余的#incldue

结果发现低估了难度,VS会间接引入许多目录。

略有不甘,暂且作为一个解析XML文件的示例。

代码

VSProjectParser.h

#include <QVector>
#include <memory>class VSProjectParser {
public:VSProjectParser (const QString &vsProjectFilePath);QVector<QString> getIncludeDirectoriesRealPath ();QVector<QString> getCppFilesRealPath ();QVector<QString> getHeadFilesRealPath ();private:class Impl;std::shared_ptr<Impl> m_impl = nullptr;
};

VSProjectParser.cpp

#include "VSProjectParser.h"#include <QDebug>
#include <QDir>
#include <QDomDocument>
#include <QDomElement>
#include <QDomNode>
#include <QFile>
#include <QFileInfo>
#include <QHash>
#include <memory>class Document {
public:Document (const QString &projFilePath);QVector<QString> extractCppFiles ();QVector<QString> extractHeadFiles ();private:void extractTasgInfo ();QHash<QString, QVector<QString>> m_tagsInfo = {};QString m_projFilePath						= "";
};class VSProjectParser::Impl {
public:Impl (const QString &vsProjectFilePath) : m_vsProjectFileInfo (vsProjectFilePath), m_document (vsProjectFilePath){}QFileInfo m_vsProjectFileInfo = "";Document m_document;
};Document::Document (const QString &projFilePath) : m_projFilePath (projFilePath)
{extractTasgInfo();
}QVector<QString>
Document::extractCppFiles()
{QVector<QString> cppTags {"ClCompile"};QVector<QString> ret;for (QString tag : cppTags) {if (m_tagsInfo.contains (tag))ret.append (m_tagsInfo.value (tag));}return ret;
}QVector<QString>
Document::extractHeadFiles()
{QVector<QString> headTags {"ClInclude", "QtMoc"};QVector<QString> ret;for (QString tag : headTags) {if (m_tagsInfo.contains (tag))ret.append (m_tagsInfo.value (tag));}return ret;
}void
Document::extractTasgInfo()
{QFile file (m_projFilePath);if (!file.open (QIODevice::ReadOnly)) {qDebug() << "Failed to open the file.";return;}QDomDocument doc;if (!doc.setContent (&file)) {qDebug() << "Failed to parse the file into a DOM tree.";return;}file.close();QDomElement root = doc.documentElement();QHash<QString, QVector<QString>> tags_with_include_attribute;constexpr auto ATTR_INCLUDE = "Include";QDomNodeList itemGroups = root.elementsByTagName ("ItemGroup");for (int i = 0; i < itemGroups.count(); ++i) {QDomNode itemGroup	  = itemGroups.at (i);QDomNodeList children = itemGroup.childNodes();for (int j = 0; j < children.count(); ++j) {QDomNode child = children.at (j);if (child.isElement()) {QDomElement element = child.toElement();QString tagName		= element.tagName();tags_with_include_attribute[tagName].push_back (element.attribute (ATTR_INCLUDE));}}}QVector<QString> keys;m_tagsInfo = tags_with_include_attribute;
}VSProjectParser::VSProjectParser (const QString &vsProjectFilePath) : m_impl (new Impl (vsProjectFilePath))
{
}QVector<QString>
VSProjectParser::getIncludeDirectoriesRealPath()
{QVector<QString> headers = getHeadFilesRealPath();QVector<QString> ret;for (QString &file : headers) {QFileInfo fileInfo (file);if (!fileInfo.exists()) {qDebug() << __FUNCTION__ << "File not found:" << file;continue;}ret.append (fileInfo.dir().absolutePath());}return ret;
}QVector<QString>
VSProjectParser::getCppFilesRealPath()
{QVector<QString> includes = m_impl->m_document.extractCppFiles();QVector<QString> ret;for (QString &file : includes) {file = m_impl->m_vsProjectFileInfo.dir().absolutePath() + "/" + file;QFileInfo fileInfo (file);if (fileInfo.exists())ret.append (fileInfo.absoluteFilePath());elseqDebug() << __FUNCTION__ << "File not found:" << file;}return ret;
}QVector<QString>
VSProjectParser::getHeadFilesRealPath()
{QVector<QString> includes = m_impl->m_document.extractHeadFiles();QVector<QString> ret;for (QString &file : includes) {file = m_impl->m_vsProjectFileInfo.dir().absolutePath() + "/" + file;QFileInfo fileInfo (file);if (fileInfo.exists())ret.append (fileInfo.absoluteFilePath());elseqDebug() << __FUNCTION__ << "File not found:" << file;}return ret;
}
http://www.tj-hxxt.cn/news/56575.html

相关文章:

  • 受欢迎的南昌网站建设2023年国际新闻大事件10条
  • 学校网站怎么做的好处揭阳seo推广公司
  • 做企业网站收费多少钱技师培训
  • app应用开发seo网络排名优化
  • 宜兴做网站多少钱信阳seo优化
  • 服务器租用网站模板seo优化工作
  • 企业网站管理系统推荐最佳搜索引擎磁力王
  • 做网站需要域名还需要什么seo外包服务项目
  • 万能影视免费观看app深圳seo优化方案
  • 网站开发面试题免费推广平台
  • 一站式网站建设业务seo优化技术招聘
  • 外包客服网站内容优化方法
  • 成都企业网站建设及公司ppt百度seo咋做
  • 新开传奇网站站seo是干啥的
  • 网站域名解析错误怎么办百度手机助手app安卓版官方下载
  • 国外互联网科技网站投放广告
  • 建筑必看六个网站seo优化上海牛巨微
  • 企业网站开发周期山东潍坊疫情最新消息
  • 专业网站建设制作搜索引擎优化的目的是
  • 珠海网站优化2020做seo还有出路吗
  • 北京便宜网站建设谷歌搜索入口中文
  • 从网站下载壁纸做海报涉及网站建设公司排行榜
  • 学做ppt的网站 免费泰州seo外包公司
  • 做网站必须要注册公司么产品推广宣传方案
  • 新闻网站建设论文新闻今天最新消息
  • html5手机网站制作软件长春最专业的seo公司
  • 传奇私服广告网站怎么做网络推广是干什么的
  • 建站 哪个网站系统好用武汉网站seo推广公司
  • 郑州专业做微信网站起飞页自助建站平台
  • 淘宝详情页制作成都百度提升优化