📄 main.cpp
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the tools applications of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "rcc.h"#include "../../corelib/kernel/qcorecmdlineargs_p.h"#include <QFile>#include <QDir>// Some static globalsstatic bool writeBinary = false;static QString initName;static bool verbose = false;static int compressLevel = CONSTANT_COMPRESSLEVEL_DEFAULT;static int compressThreshold = CONSTANT_COMPRESSTHRESHOLD_DEFAULT;static QString resourceRoot;bool processResourceFile(const QStringList &filenamesIn, const QString &filenameOut, bool list){ if (verbose) fprintf(stderr, "Qt resource compiler\n"); //setup RCCResourceLibrary library; library.setFormat(writeBinary ? RCCResourceLibrary::Binary : RCCResourceLibrary::C_Code); library.setInputFiles(filenamesIn); library.setInitName(initName); library.setVerbose(verbose); library.setCompressLevel(compressLevel); library.setCompressThreshold(compressThreshold); library.setResourceRoot(resourceRoot); if(!library.readFiles(list)) return false; //open output FILE *out_fd = stdout; if (!filenameOut.isEmpty() && filenameOut != QLatin1String("-")) {#if defined(_MSC_VER) && _MSC_VER >= 1400 if (fopen_s(&out_fd, filenameOut.toLocal8Bit().constData(), writeBinary ? "wb": "w")) {#else if(!(out_fd = fopen(filenameOut.toLocal8Bit().constData(), writeBinary ? "wb": "w"))) {#endif fprintf(stderr, "Unable to open %s for writing\n", qPrintable(filenameOut)); return false; } } //do the task bool ret = true; if(list) { const QStringList data = library.dataFiles(); for(int i = 0; i < data.size(); ++i) fprintf(out_fd, "%s\n", qPrintable(QDir::cleanPath(data.at(i)))); } else { ret = library.output(out_fd); } if(out_fd != stdout) fclose(out_fd); //done return ret;}int showHelp(const QString &argv0, const QString &error){ fprintf(stderr, "Qt resource compiler\n"); if (!error.isEmpty()) fprintf(stderr, "%s: %s\n", argv0.toLocal8Bit().constData(), error.toLocal8Bit().constData()); fprintf(stderr, "Usage: %s [options] <inputs>\n\n" "Options:\n" " -o file write output to file rather than stdout\n" " -name name create an external initialization function with name\n" " -threshold level threshold to consider compressing files\n" " -compress level compress input files by level\n" " -root path prefix resource access path with root path\n" " -no-compress disable all compression\n" " -binary output a binary file for use as a dynamic resource\n" " -version display version\n" " -help display this information\n", argv0.toLocal8Bit().constData()); return 1;}int main(int argc, char *argv[]){ QString outFilename; bool helpRequested = false, list = false; QStringList files; QStringList args = qCmdLineArgs(argc, argv); //parse options QString errorMsg; for (int i = 1; i < args.count() && errorMsg.isEmpty(); i++) { if (args[i].isEmpty()) continue; if (args[i][0] == '-') { // option QString opt = args[i]; if (opt == QLatin1String("-o")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing output name"); break; } outFilename = args[++i]; } else if (opt == QLatin1String("-name")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing target name"); break; } initName = args[++i]; } else if (opt == QLatin1String("-root")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing root path"); break; } resourceRoot = QDir::cleanPath(args[++i]); if(resourceRoot.isEmpty() || resourceRoot.at(0) != QLatin1Char('/')) errorMsg = QLatin1String("Root must start with a /"); } else if (opt == QLatin1String("-compress")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression level"); break; } compressLevel = args[++i].toInt(); } else if (opt == QLatin1String("-threshold")) { if (!(i < argc-1)) { errorMsg = QLatin1String("Missing compression threshold"); break; } compressThreshold = args[++i].toInt(); } else if (opt == QLatin1String("-binary")) { writeBinary = true; } else if (opt == QLatin1String("-verbose")) { verbose = true; } else if (opt == QLatin1String("-list")) { list = true; } else if (opt == QLatin1String("-version") || opt == QLatin1String("-v")) { fprintf(stderr, "Qt Resource Compiler version %s\n", QT_VERSION_STR); return 1; } else if (opt == QLatin1String("-help") || opt == QLatin1String("-h")) { helpRequested = true; } else if (opt == QLatin1String("-no-compress")) { compressLevel = -2; } else { errorMsg = QString::fromLatin1("Unknown option: '%1'").arg(args[i]); } } else { if (!QFile::exists(args[i])) { qWarning("%s: File does not exist '%s'", qPrintable(args[0]), qPrintable(args[i])); return 1; } files.append(args[i]); } } if (!files.size() || !errorMsg.isEmpty() || helpRequested) return showHelp(args[0], errorMsg); return int(!processResourceFile(files, outFilename, list));}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -