aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2022-12-23 11:32:27 +0100
committerEike Ziller <eike.ziller@qt.io>2023-01-04 08:44:08 +0000
commit0a74a1e99e37e6685e627577dd52d4f06e3c2832 (patch)
tree43a05dc82bc437a2d43c294967831ac03b747396
parentfffd732edc49adc328470cf37a4e18ab5a78be47 (diff)
Properly support relative paths in Link with Qt UI
Relative paths are resolved based on the applicationDirPath, so reflect that in the path chooser too. Also, do not resolve relative paths in the path chooser to absolute paths when writing to the settings. Change-Id: Iaeffa2cad1e145adbbc5c918b5f8ff14f6f2b31e Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/plugins/qtsupport/qtoptionspage.cpp38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp
index f1cbc250b3..b1f3c12971 100644
--- a/src/plugins/qtsupport/qtoptionspage.cpp
+++ b/src/plugins/qtsupport/qtoptionspage.cpp
@@ -930,29 +930,32 @@ static QStringList qtversionFilesToCheck()
return Utils::transform(kSubdirsToCheck, [](const QString &dir) { return qtVersionsFile(dir); });
}
-static std::optional<QString> settingsDirForQtDir(const QString &qtDir)
+static std::optional<FilePath> settingsDirForQtDir(const FilePath &baseDirectory,
+ const FilePath &qtDir)
{
- const QStringList dirsToCheck = Utils::transform(kSubdirsToCheck, [qtDir](const QString &dir) {
- return QString(qtDir + '/' + dir);
+ const FilePaths dirsToCheck = Utils::transform(kSubdirsToCheck, [qtDir](const QString &dir) {
+ return qtDir / dir;
});
- const QString validDir = Utils::findOrDefault(dirsToCheck, [](const QString &dir) {
- return QFile::exists(settingsFile(dir)) || QFile::exists(qtVersionsFile(dir));
+ const FilePath validDir = Utils::findOrDefault(dirsToCheck, [baseDirectory](const FilePath &dir) {
+ return QFile::exists(settingsFile(baseDirectory.resolvePath(dir).toString()))
+ || QFile::exists(qtVersionsFile(baseDirectory.resolvePath(dir).toString()));
});
if (!validDir.isEmpty())
return validDir;
return {};
}
-static bool validateQtInstallDir(FancyLineEdit *input, QString *errorString)
+static bool validateQtInstallDir(PathChooser *input, QString *errorString)
{
- const QString qtDir = input->text();
- if (!settingsDirForQtDir(qtDir)) {
+ const FilePath qtDir = input->rawFilePath();
+ if (!settingsDirForQtDir(input->baseDirectory(), qtDir)) {
if (errorString) {
const QStringList filesToCheck = settingsFilesToCheck() + qtversionFilesToCheck();
- *errorString = "<html><body>" + Tr::tr(
- "Qt installation information was not found in \"%1\". "
- "Choose a directory that contains one of the files %2")
- .arg(qtDir, "<pre>" + filesToCheck.join('\n') + "</pre>");
+ *errorString = "<html><body>"
+ + Tr::tr("Qt installation information was not found in \"%1\". "
+ "Choose a directory that contains one of the files %2")
+ .arg(qtDir.toUserOutput(),
+ "<pre>" + filesToCheck.join('\n') + "</pre>");
}
return false;
}
@@ -988,13 +991,14 @@ void QtOptionsPageWidget::linkWithQt()
auto pathInput = new PathChooser;
pathLayout->addWidget(pathInput);
pathInput->setExpectedKind(PathChooser::ExistingDirectory);
+ pathInput->setBaseDirectory(FilePath::fromString(QCoreApplication::applicationDirPath()));
pathInput->setPromptDialogTitle(title);
pathInput->setMacroExpander(nullptr);
pathInput->setValidationFunction([pathInput](FancyLineEdit *input, QString *errorString) {
if (pathInput->defaultValidationFunction()
&& !pathInput->defaultValidationFunction()(input, errorString))
return false;
- return validateQtInstallDir(input, errorString);
+ return validateQtInstallDir(pathInput, errorString);
});
const std::optional<FilePath> currentLink = currentlyLinkedQtDir(nullptr);
pathInput->setFilePath(currentLink ? *currentLink : defaultQtInstallationPath());
@@ -1027,10 +1031,12 @@ void QtOptionsPageWidget::linkWithQt()
dialog.exec();
if (dialog.result() == QDialog::Accepted) {
- const std::optional<QString> settingsDir = settingsDirForQtDir(pathInput->rawFilePath().toString());
+ const std::optional<FilePath> settingsDir = settingsDirForQtDir(pathInput->baseDirectory(),
+ pathInput->rawFilePath());
if (QTC_GUARD(settingsDir)) {
- QSettings(settingsFile(Core::ICore::resourcePath().toString()), QSettings::IniFormat)
- .setValue(kInstallSettingsKey, *settingsDir);
+ QSettings settings(settingsFile(Core::ICore::resourcePath().toString()),
+ QSettings::IniFormat);
+ settings.setValue(kInstallSettingsKey, settingsDir->toVariant());
askForRestart = true;
}
}