projectporter.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 406 行 · 第 1/2 页
CPP
406 行
*/void ProjectPorter::portFiles(QString basePath, QStringList fileNames){ foreach(QString fileName, fileNames) { QString fullFilePath; QFileInfo fileInfo(fileName); if (fileInfo.isAbsolute()) { fullFilePath = QDir::cleanPath(fileName); } else { fullFilePath = QDir::cleanPath(basePath + QLatin1String("/") + fileName); } QFileInfo fullFilePathInfo(fullFilePath); if (!fullFilePathInfo.exists()) { printf("Could not find file: %s\n", QDir::toNativeSeparators(fullFilePath).toLocal8Bit().constData()); continue; } if (!processedFilesSet.contains(fullFilePath)){ Logger::instance()->globalState[QLatin1String("currentFileName")] = fullFilePath; filePorter.port(fullFilePath); processedFilesSet.insert(fullFilePath); } }}void ProjectPorter::portProFile(QString fileName, QMap<QString, QString> tagMap){ // Read pro file. QFile proFile(fileName); if (!proFile.open(QIODevice::ReadOnly)) return; const QByteArray contents = proFile.readAll(); const QByteArray lineEnding = detectLineEndings(contents); proFile.seek(0); QTextStream proTextStream(&proFile); QStringList lines; while (!proTextStream.atEnd()) lines += proTextStream.readLine(); proFile.close(); // Find out what modules we should add to the QT variable. QSet<QByteArray> qtModules; // Add qt3support to the Qt tag qtModules.insert(QByteArray("qt3support")); // Read CONFIG and add other modules. QStringList config = tagMap[QLatin1String("CONFIG")].split(QLatin1String(" "), QString::SkipEmptyParts); if (config.contains(QLatin1String("opengl"))) qtModules.insert(QByteArray("opengl")); if (config.contains(QLatin1String("xml"))) qtModules.insert(QByteArray("xml")); if (config.contains(QLatin1String("sql"))) qtModules.insert(QByteArray("sql")); if (config.contains(QLatin1String("network"))) qtModules.insert(QByteArray("network")); // Get set of used modules from the file porter. qtModules += filePorter.usedQtModules(); // Remove gui and core. qtModules.remove(QByteArray("gui")); qtModules.remove(QByteArray("core")); // Qt3Support is already added. qtModules.remove(QByteArray("3support")); // Remove modules already present in the QT variable. QStringList qt = tagMap[QLatin1String("QT")].split(QLatin1String(" "), QString::SkipEmptyParts); foreach(QString name, qt) { qtModules.remove(name.toLatin1()); } Logger *logger = Logger::instance(); bool changesMade = false; if (!qtModules.isEmpty()) { changesMade = true; QString insertText = QLatin1String("QT += "); foreach(QByteArray module, qtModules) { insertText += QString::fromLatin1(module) + QLatin1Char(' '); } lines += QString(QLatin1String("#The following line was inserted by qt3to4")); lines += insertText; QString logText = QLatin1String("In file ") + logger->globalState.value(QLatin1String("currentFileName")) + QLatin1String(": Added entry ") + insertText; logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText)); } // Add uic3 if we have forms, and change FORMS and INTERFACES to FORMS3 if (!tagMap[QLatin1String("FORMS")].isEmpty() || !tagMap[QLatin1String("INTERFACES")].isEmpty()) { changesMade = true; lines += QString(QLatin1String("#The following line was inserted by qt3to4")); QString insertText = QLatin1String("CONFIG += uic3") + QString::fromLatin1(lineEnding.constData()); lines += insertText; QString logText = QLatin1String("In file ") + logger->globalState.value(QLatin1String("currentFileName")) + QLatin1String(": Added entry ") + insertText; logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText)); const QString formsToForms3(QLatin1String("#The following line was changed from FORMS to FORMS3 by qt3to4")); const QString interfacesToForms3(QLatin1String("#The following line was changed from INTERFACES to FORMS3 by qt3to4")); for (int i = 0; i < lines.count(); ++i) { QString cLine = lines.at(i); cLine = cLine.trimmed(); if (cLine.startsWith(QLatin1String("FORMS"))) { lines[i].replace(QLatin1String("FORMS"), QLatin1String("FORMS3")); lines.insert(i, formsToForms3); ++i; QString logText = QLatin1String("In file ") + logger->globalState.value(QLatin1String("currentFileName")) + QLatin1String(": Renamed FORMS to FORMS3"); logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText)); } else if (cLine.startsWith(QLatin1String("INTERFACES"))) { lines[i].replace(QLatin1String("INTERFACES"), QLatin1String("FORMS3")); lines.insert(i, interfacesToForms3); ++i; QString logText = QLatin1String("In file ") + logger->globalState.value(QLatin1String("currentFileName")) + QLatin1String(": Renamed INTERFACES to FORMS3"); logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText)); } } } // Comment out any REQUIRES tag. if (!tagMap[QLatin1String("REQUIRES")].isEmpty()) { changesMade = true; QString insertText(QLatin1String("#The following line was commented out by qt3to4")); for (int i = 0; i < lines.count(); ++i) { if (lines.at(i).startsWith(QLatin1String("REQUIRES"))) { QString lineCopy = lines.at(i); lineCopy.prepend(QLatin1Char('#')); lines[i] = lineCopy; lines.insert(i, insertText); ++i; //skip ahead, we just insertet a line at i. QString logText = QLatin1String("In file ") + logger->globalState.value(QLatin1String("currentFileName")) + QLatin1String(": Commented out REQUIRES section"); logger->addEntry(new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), logText)); } } } // Check if any changes has been made. if (!changesMade) { Logger::instance()->addEntry( new PlainLogEntry(QLatin1String("Info"), QLatin1String("Porting"), QLatin1String("No changes made to file ") + fileName)); Logger::instance()->commitSection(); return; } // Write lines to array. QByteArray bob; QTextStream outProFileStream(&bob); foreach(QString line, lines) outProFileStream << line << lineEnding; outProFileStream.flush(); // Write array to file, commit log if write was successful. FileWriter::WriteResult result = FileWriter::instance()->writeFileVerbously(fileName, bob); if (result == FileWriter::WriteSucceeded) { logger->commitSection(); } else if (result == FileWriter::WriteFailed) { logger->revertSection(); logger->addEntry( new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"), QLatin1String("Error writing to file ") + fileName)); } else if (result == FileWriter::WriteSkipped) { logger->revertSection(); logger->addEntry( new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"), QLatin1String("User skipped file ") + fileName)); } else { // Internal error. logger->revertSection(); const QString errorString = QLatin1String("Internal error in qt3to4 - FileWriter returned invalid result code while writing to ") + fileName; logger->addEntry(new PlainLogEntry(QLatin1String("Error"), QLatin1String("Porting"), errorString)); }}/* Enables attribute generation for fileName. The file is looked up using the provied includeFiles object.*/void ProjectPorter::enableAttributes(const IncludeFiles &includeFiles, const QString &fileName){ QString resolvedFilePath = includeFiles.resolve(fileName); if (!QFile::exists(resolvedFilePath)) resolvedFilePath = includeFiles.angleBracketLookup(fileName); if (!QFile::exists(resolvedFilePath)) return; TokenContainer tokenContainer = preprocessorCache.sourceTokens(resolvedFilePath); TokenAttributes *attributes = tokenContainer.tokenAttributes(); attributes->addAttribute("CreateAttributes", "True");}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?