forked from qt-creator/qt-creator
Fix .ui code completion for some cmake projects
CMake generates the ui*h file in the directory that corresponds to the CMakeLists.txt. Creator does not have the information whihch CMakeLists.txt file includes the .ui file. This patch adds a crude heuristic that searches for the right CMakeLists.txt. Task-number: QTCREATORBUG-8509 Change-Id: I0f31d9766c6b5988a00ab618026ea052690dd649 Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
@@ -651,16 +651,28 @@ QString CMakeProject::uicCommand() const
|
||||
|
||||
QString CMakeProject::uiHeaderFile(const QString &uiFile)
|
||||
{
|
||||
QDir srcDirRoot = QDir(projectDirectory());
|
||||
QString relativePath = srcDirRoot.relativeFilePath(uiFile);
|
||||
QFileInfo fi(uiFile);
|
||||
Utils::FileName project = Utils::FileName::fromString(projectDirectory());
|
||||
Utils::FileName baseDirectory = Utils::FileName::fromString(fi.absolutePath());
|
||||
|
||||
while (baseDirectory.isChildOf(project)) {
|
||||
Utils::FileName cmakeListsTxt = baseDirectory;
|
||||
cmakeListsTxt.appendPath(QLatin1String("CMakeLists.txt"));
|
||||
if (cmakeListsTxt.toFileInfo().exists())
|
||||
break;
|
||||
QDir dir(baseDirectory.toString());
|
||||
dir.cdUp();
|
||||
baseDirectory = Utils::FileName::fromString(dir.absolutePath());
|
||||
}
|
||||
|
||||
QDir srcDirRoot = QDir(project.toString());
|
||||
QString relativePath = srcDirRoot.relativeFilePath(baseDirectory.toString());
|
||||
QDir buildDir = QDir(activeTarget()->activeBuildConfiguration()->buildDirectory());
|
||||
QString uiHeaderFilePath = buildDir.absoluteFilePath(relativePath);
|
||||
|
||||
QFileInfo fi(uiHeaderFilePath);
|
||||
uiHeaderFilePath = fi.absolutePath();
|
||||
uiHeaderFilePath += QLatin1String("/ui_");
|
||||
uiHeaderFilePath += fi.completeBaseName();
|
||||
uiHeaderFilePath += QLatin1String(".h");
|
||||
|
||||
return QDir::cleanPath(uiHeaderFilePath);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user