• 4426阅读
  • 2回复

[原创]Qt绿化工具,解决msvc静态编译qt后无法更改安装目录的问题 [复制链接]

上一主题 下一主题
离线dosmlp
 

只看楼主 倒序阅读 楼主  发表于: 2014-06-26
解决msvc静态编译qt后无法更改安装目录问题
主要是修改了*.prl中的lib路径,应用了目录遍历和正则表达式
源码以及成品(msvc2012静态编译,兼容XP)
更改安装目录后将本工具放到安装目录根目录下运行即可

  1. #include <QCoreApplication>
  2. #include <QDebug>
  3. #include <QDir>
  4. #include <QFile>
  5. #include <QRegExp>
  6. #include <iostream>
  7. #include <qt_windows.h>
  8. #include <QDirIterator>
  9. int main(int argc, char *argv[])
  10. {
  11.     QCoreApplication a(argc, argv);
  12.     QString appPath = QCoreApplication::applicationDirPath();
  13.     qDebug()<<QStringLiteral("当前路径:")+appPath;
  14.     QFile check;
  15.     check.setFileName(appPath+"/bin/qmake.exe");
  16.     if(!check.open(QIODevice::ReadOnly)){
  17.         std::cout<<"\n\n<<<<<<<<请将本程序放入Qt安装目录的根目录>>>>>>>>\n\n回车结束"<<std::endl;
  18.         exit(0);
  19.     }
  20.     check.close();
  21.     check.setFileName(appPath+"/bin/qt.conf");
  22.     check.open(QIODevice::ReadWrite|QIODevice::Text);
  23.     check.resize(0);
  24.     check.write("[Paths]\nPrefix=..");
  25.     check.flush();
  26.     check.close();
  27.     QDir dir;
  28.     QRegExp PRL("\\w:\\\\.*\\\\lib");
  29.     PRL.setMinimal(true);
  30.     QStringList filters;
  31.     filters <<"*.prl";
  32.     dir.setPath(appPath);
  33.     dir.setNameFilters(filters);
  34.     QDirIterator iter(dir,QDirIterator::Subdirectories);
  35.     appPath.replace("/","\\\\");
  36.     appPath.append("\\\\lib");
  37.     while (iter.hasNext()){
  38.         qDebug()<<"start";
  39.            iter.next();
  40.            QFileInfo info=iter.fileInfo();
  41.            if (info.isFile()){
  42.                QString filename = info.absoluteFilePath();
  43.                QFile *file = new QFile(filename);
  44.                file->open(QIODevice::ReadWrite|QIODevice::Text);
  45.                QString read_data = file->readAll();
  46.                read_data.replace(PRL,appPath);
  47.                file->resize(0);
  48.                char *ch;
  49.                ch = read_data.toLatin1().data();
  50.                file->write(ch);
  51.                file->flush();
  52.                file->close();
  53.            }
  54.     }
  55.     qDebug()<<"SUCCESSFULL!";
  56.     return a.exec();
  57. }
file_all.7z (759 K) 下载次数:14





离线ashe0817

只看该作者 1楼 发表于: 2014-06-26
这个,还是用C写个控制台程序更实用呀,没什么依赖性,文件也小。
离线dosmlp

只看该作者 2楼 发表于: 2014-06-27
回 ashe0817 的帖子
ashe0817:这个,还是用C写个控制台程序更实用呀,没什么依赖性,文件也小。[表情]  (2014-06-26 22:11) 

已经习惯Qt了
快速回复
限100 字节
 
上一个 下一个