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 = "" + Tr::tr(
- "Qt installation information was not found in \"%1\". "
- "Choose a directory that contains one of the files %2")
- .arg(qtDir, "" + filesToCheck.join('\n') + "
");
+ *errorString = ""
+ + Tr::tr("Qt installation information was not found in \"%1\". "
+ "Choose a directory that contains one of the files %2")
+ .arg(qtDir.toUserOutput(),
+ "" + filesToCheck.join('\n') + "
");
}
return false;
}
@@ -990,13 +993,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 currentLink = currentlyLinkedQtDir(nullptr);
pathInput->setFilePath(currentLink ? *currentLink : defaultQtInstallationPath());
@@ -1029,11 +1033,12 @@ void QtOptionsPageWidget::linkWithQt()
dialog.exec();
if (dialog.result() == QDialog::Accepted) {
- const std::optional settingsDir = settingsDirForQtDir(pathInput->rawFilePath().toString());
+ const std::optional settingsDir = settingsDirForQtDir(pathInput->baseDirectory(),
+ pathInput->rawFilePath());
if (QTC_GUARD(settingsDir)) {
const QString settingsFilePath = settingsFile(Core::ICore::resourcePath().toString());
QSettings settings(settingsFilePath, QSettings::IniFormat);
- settings.setValue(kInstallSettingsKey, *settingsDir);
+ settings.setValue(kInstallSettingsKey, settingsDir->toVariant());
settings.sync();
if (settings.status() == QSettings::AccessError) {
QMessageBox::critical(Core::ICore::dialogParent(),
diff --git a/src/plugins/texteditor/snippets/snippetoverlay.cpp b/src/plugins/texteditor/snippets/snippetoverlay.cpp
index 05a2391ae61..deac459fc1a 100644
--- a/src/plugins/texteditor/snippets/snippetoverlay.cpp
+++ b/src/plugins/texteditor/snippets/snippetoverlay.cpp
@@ -38,8 +38,13 @@ void SnippetOverlay::setFinalSelection(const QTextCursor &cursor, const QColor &
void SnippetOverlay::updateEquivalentSelections(const QTextCursor &cursor)
{
const int ¤tIndex = indexForCursor(cursor);
+ if (currentIndex == m_finalSelectionIndex) {
+ accept();
+ return;
+ }
if (currentIndex < 0)
return;
+ QTC_ASSERT(currentIndex < m_selections.size(), return);
const QString ¤tText = cursorForIndex(currentIndex).selectedText();
const QList &equivalents = m_variables.value(m_selections[currentIndex].variableIndex);
for (int i : equivalents) {
diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py
index 903ca01156a..f9e6b0bdc05 100644
--- a/tests/system/suite_tools/tst_designer_autocomplete/test.py
+++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py
@@ -7,7 +7,9 @@ def main():
startQC()
if not startedWithoutPluginError():
return
- createProject_Qt_GUI(tempDir(), "DesignerTestApp")
+ projectName = "DesignerTestApp"
+ createProject_Qt_GUI(tempDir(), projectName)
+ invokeMenuItem('Build', 'Build Project "%s"' % projectName)
selectFromLocator("mainwindow.ui")
dragAndDrop(waitForObject("{container=':qdesigner_internal::WidgetBoxCategoryListView'"
"text='Push Button' type='QModelIndex'}"), 5, 5,