/**
* @author: Lion Chen/QQ:174980551
* @date: 2014-01-23
*/
#include "engine.h"
#include <QDir>
#include <QFileInfoList>
Engine::Engine(QString proDir, QString schdir, QString fileName, FILE_TYPES selectedFile, QObject *parent) :
QThread(parent)
{
ProDir = proDir;
searchDir = schdir;
proFileName = fileName;
fileTypes = selectedFile;
stopped = false;
}
Engine::~Engine()
{
stop();
}
void Engine::stop(void)
{
exit();
while(!stopped)
{
;
}
}
void Engine::run(void)
{
QFile proFile;
proFile.setFileName(proFileName);
proFile.open(QIODevice::ReadWrite);
QTextStream *stream;
/** 以流的形式获取文件数据 */
stream = new QTextStream( &proFile );
stream->seek(proFile.size());
QString incPath, socFile, hedFile;
incPath.append("\nINCLUDEPATH += "+searchDir);
socFile.append("\nSOURCES += ");
hedFile.append("\nHEADERS += ");
incPath.replace("\\","/");
//如果传入的项目文件路径为空,则以绝对路径方式添加,否则以相对路径方式添加
if(""!=ProDir)
{
FindAndAddEngine(ProDir, searchDir, &proFile, fileTypes, &incPath, &socFile, &hedFile);
}
else
{
FindAndAddEngine(searchDir, &proFile, fileTypes, &incPath, &socFile, &hedFile);
}
*stream<<incPath+'\n';
*stream<<hedFile+'\n';
*stream<<socFile+'\n';
stream->flush();
proFile.close();
stopped = true;;
}
void Engine::FindAndAddEngine(QString schdir, QFile *file, FILE_TYPES ftypes, QString *incPath, QString *socFile, QString *hedFile)
{
QDir dir(schdir);
/** 开始搜索 */
//设置过滤器(目录,文件或非上级目录)
dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
dir.setSorting(QDir::DirsFirst);
//取得目录中文件列表(包含目录)
QFileInfoList filelist = dir.entryInfoList();
int i=0;
do{
emit EngineProcessing(false, i);
if(0==filelist.size())
{
return;
}
QFileInfo fileInfo = filelist.at(i);
bool bisDir=fileInfo.isDir();
//判断是否为目录,如果是目录则遍历,否则当前处理文件
if(bisDir)
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
incPath->append(" \\\n "+addFile);
FindAndAddEngine(fileInfo.absoluteFilePath(), file, /*stream,*/ fileTypes, incPath, socFile, hedFile);
}
else
{
//取得文件类型后缀
QString extension=fileInfo.suffix().toLower();
if(("c"==extension) & (ftypes.source&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("c++"==extension) & ((ftypes.source>>1)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("cpp"==extension) & ((ftypes.source>>2)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("cxx"==extension) & ((ftypes.source>>3)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("cc"==extension) & ((ftypes.source>>4)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("tcc"==extension) & ((ftypes.source>>5)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
socFile->append(" \\\n "+addFile);
}
else if(("h"==extension) & (ftypes.header&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
hedFile->append(" \\\n "+addFile);
}
else if(("h++"==extension) & ((ftypes.header>>1)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
hedFile->append(" \\\n "+addFile);
}
else if(("hpp"==extension) & ((ftypes.header>>2)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
hedFile->append(" \\\n "+addFile);
}
else if(("hxx"==extension) & ((ftypes.header>>3)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
hedFile->append(" \\\n "+addFile);
}
}
i++;
}while(i<filelist.count());
emit EngineProcessing(true, ++i);
}
void Engine::FindAndAddEngine(QString proDir, QString schdir, QFile *file, FILE_TYPES ftypes, QString *incPath, QString *socFile, QString *hedFile)
{
QDir dir(schdir);
QFileInfo relaInfo(proDir);
//获取项目文件所在目录
QDir relaDir(relaInfo.absolutePath());
/** 开始搜索 */
//设置过滤器(目录,文件或非上级目录)
dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot);
dir.setSorting(QDir::DirsFirst);
//取得目录中文件列表(包含目录)
QFileInfoList filelist = dir.entryInfoList();
int i=0;
do{
emit EngineProcessing(false, i);
if(0==filelist.size())
{
return;
}
QFileInfo fileInfo = filelist.at(i);
bool bisDir=fileInfo.isDir();
//判断是否为目录,如果是目录则遍历,否则当前处理文件
if(bisDir)
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
//计算当前文件夹与项目文件所在文件夹的相对路径
incPath->append(" \\\n "+relaDir.relativeFilePath(fileInfo.absoluteFilePath()));
FindAndAddEngine(proDir, fileInfo.absoluteFilePath(), file, /*stream,*/ fileTypes, incPath, socFile, hedFile);
}
else
{
//取得文件类型后缀
QString extension=fileInfo.suffix().toLower();
if(("c"==extension) & (ftypes.source&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
//计算当前文件夹与项目文件所在文件夹的相对路径
socFile->append(" \\\n "+relaDir.relativeFilePath(fileInfo.absoluteFilePath()));
}
else if(("c++"==extension) & ((ftypes.source>>1)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
//计算当前文件夹与项目文件所在文件夹的相对路径
socFile->append(" \\\n "+relaDir.relativeFilePath(fileInfo.absoluteFilePath()));
}
else if(("cpp"==extension) & ((ftypes.source>>2)&&0x01))
{
QString addFile = fileInfo.absoluteFilePath();
addFile.replace("\\","/");
//计算当前文件夹与项目文件所在文件夹的相对路径
socFile->append(" \\\n "+relaDir.relativeFilePath
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Qt Creator 文件添加助手是有Giraffe工作组提供的免费且开源的助手软件。该软件可以以文件夹的形式向Qt Creator工程添加已存在的源代码文件,该功能是Qt Creator没有提供的。 之前放出的版本已有多人下载,现在在此声明,该软件的使用说明可以参考我的博客:http://blog.csdn.net/desert187/article/details/18711127 其以后版本更新也会由该博客给出。如果对本软件有何修改意见,可在该博客回复我。 ——Lion Chen
资源推荐
资源详情
资源评论




























收起资源包目录























共 19 条
- 1
资源评论

- desert187juice2015-05-20该资源已经过期,更新 2.2 版本以及以后版本请参考“desert187”的博客: http://blog.csdn.net/desert187/article/details/18711127 另外可到:http://pan.baidu.com/s/1qWDRdyk 下载全部版本的助手软件。

lionchan187
- 粉丝: 182
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- PHOTOSHOP说课稿.doc
- 计算机专业职业生涯规划书样本.doc
- c语言初学必背代码.doc
- 思科系统公司的无线网络帮助密尔沃基儿童医院改进患者服务.docx
- 物联网行业应用及技术.doc
- COMSOL激光熔覆技术详解:模型与视频教程助力高效表面改性 详解
- (源码)基于ROS和ChibiOS的移动机器人实时控制系统.zip
- 武汉智慧城市概念设计方案终稿.docx
- 网络营销技术组合.pptx
- 设计企业信息化解决方案.doc
- 项目管理的特点[最终版].pdf
- 2022年会计职称计算机考试题库.doc
- 2023年ORACLE定时备份方案.doc
- 企业会计学网络实验指导书.doc
- 山东省淄博市应用软件开发公司名录2019版762家.pdf
- 2023年二级C语言公共基础知识.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
