From 7d137e56b36247e5b30f22ac74f54d782d063bda Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 12 Jul 2024 14:06:32 +0200 Subject: [PATCH 01/46] Doc: Fix help topics for QDS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hide \sa {Read Documentation}{How To: Read Documentation} to fix QDoc warnings - List the other help topics in "Get help" (they were only accessible from All Topics) - Add an image that shows the QDS Code view instead of Qt Creator Edit mode Change-Id: I85b570b8db8953e5e676e1518fdb03f4e8bfded4 Reviewed-by: Teea Põldsam Reviewed-by: Tim Jenssen --- doc/qtcreator/src/howto/creator-help.qdoc | 30 ++++++++++++++++++ .../src/qtquick/qtquick-profiler.qdoc | 2 +- .../images/qds-help-in-code-view.webp | Bin 0 -> 22120 bytes 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 doc/qtdesignstudio/images/qds-help-in-code-view.webp diff --git a/doc/qtcreator/src/howto/creator-help.qdoc b/doc/qtcreator/src/howto/creator-help.qdoc index fa770177839..530937337cc 100644 --- a/doc/qtcreator/src/howto/creator-help.qdoc +++ b/doc/qtcreator/src/howto/creator-help.qdoc @@ -39,10 +39,16 @@ \uicontrol Help mode, go to \preferences > \uicontrol Help. \endlist + \if defined(qtdesignstudio) + The following image shows the context sensitive help in the \l Code view. + + \image qds-help-in-code-view.webp {Context-sensitive help in the Code view.} + \else The following image shows the context sensitive help in the \uicontrol Edit mode. \image qtcreator-context-sensitive-help.webp {Context-sensitive help in Edit mode} + \endif \section1 Change the font @@ -88,7 +94,13 @@ To use a keyboard shortcut for viewing help tooltips, select \uicontrol {Show help tooltips using keyboard shortcut (Alt)}. + \if defined(qtdesignstudio) + \section1 See Also + + \generatelist creator-how-to-get-help + \else \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -140,7 +152,9 @@ \endlist + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -180,7 +194,9 @@ \uicontrol General and select \uicontrol {Import Bookmarks} or \uicontrol {Export Bookmarks}. + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -236,7 +252,9 @@ punctuation, such as domain names, use the asterisk as a wild card. For example, to find \c {Pastebin.Com}, enter the search term \c {Pastebin*}. + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -268,7 +286,9 @@ \endlist + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -287,7 +307,11 @@ code editor when you press \key F1. If there is not enough vertical space, the help opens in the full-screen help mode. + \if defined(qtdesignstudio) + \image qds-help-in-code-view.webp {Context-sensitive help in the Code view.} + \else \image qtcreator-context-sensitive-help.webp {Context-sensitive help in Edit mode} + \endif To specify that the help always opens in full-screen mode or in an external window, go to \preferences > \uicontrol Help > \uicontrol General. @@ -300,7 +324,9 @@ To change this setting in a help view, select \inlineimage icons/linkicon.png. + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -335,7 +361,9 @@ home page. \endlist + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ /*! @@ -401,5 +429,7 @@ To remove the selected filter, select \inlineimage icons/minus.png. + \if defined(qtcreator) \sa {Read Documentation}{How To: Read Documentation} + \endif */ diff --git a/doc/qtcreator/src/qtquick/qtquick-profiler.qdoc b/doc/qtcreator/src/qtquick/qtquick-profiler.qdoc index eb74c5b547d..4449f9e1bab 100644 --- a/doc/qtcreator/src/qtquick/qtquick-profiler.qdoc +++ b/doc/qtcreator/src/qtquick/qtquick-profiler.qdoc @@ -160,7 +160,7 @@ \if defined(qtdesignstudio) \note In this section, you are using advanced menu items. These are not visible by default. To toggle the visibility of advanced menu items, see - \l{Customizing the Menu}. + \l{Customizing the Menu Bar}. \endif With QML Profiler, you can find causes for typical performance problems diff --git a/doc/qtdesignstudio/images/qds-help-in-code-view.webp b/doc/qtdesignstudio/images/qds-help-in-code-view.webp new file mode 100644 index 0000000000000000000000000000000000000000..b30181d795b2e1f3c108efde7aaee8575b01ad2c GIT binary patch literal 22120 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

<6ApR(Dyscut% z_)>9~T+)U5KWW+U&DhGyh-BzhU*G@am`P*Ix{-YWLfGRxLkjsmgZUv9F@lyep8) zBh_6}_6Ohaoz8ADBVfUjsM*is&UmZ$Zx@20n&`qPVeS*g%rK7(`XeAz- ztQIt>3fK@?G?1L-#2XXIvKLZdtx}=PJPiXHK+&cAURktga_r z=+b#`#iCDc>IY9~AFwIf@=8U#ZFL-ISbE3no}Bn3gXVxomCaSgUKe|wY+7pks<7o& z&k==~ucwr^+dhxjvOZkyepUY?XtabIXN&^ zNY#evdv~mU{Bxeu{q$SMCcQoxcT|bzS`YK-c}_d_uvg#g={))IUtn^r{Pwx3mnZKv zdEc<(@kP6;q}Ot9Sl>>%vG~IG%-fNZ=Dk@8>i2uqetE*l_SWKLOYyN^Ti)t;`hP2u zHhK2<+(XkNPV=|TReg6dj>Yzllm@f-ZP_2Xm&>N@P_Gt@*~D|%`dLVSuo&~x#FbkP zG#_M{b*+ix;l%KHXMeruTxomrbgMT*7;Cv0*Seg9=!J&o1gwg$FqP{t&M=vK*dk?e z>5IOdd#7z%qh2-_(+BgEkBy8|ywe(Js3$~3>|v5`;Y%ExA$ z23Ed#jx4fgE6&f>Ze1t7D$v$X`r$EEhT@=^9T%dNSPVaX;8MzTX31=6y|}VaDKCy` z!;-JDZf74oefVtE3~5)%l_f%KW|k>Jn{VBB)PHbGl_7Yg2g}UIF>dn~IQE7|7)AYl z+9RTT%3G@`-rT5lCc6 Date: Wed, 17 Jul 2024 08:49:26 +0200 Subject: [PATCH 02/46] ProjectExplorer: Fix after async path verification in JSON wizards After 83111bb3, the path validity result was coming in later and was not considered for the page completeness check any more. Fix that by running the check again when the path result is ready. Change-Id: I2aab6b2130896d63f7e0359ced39e758393a2644 Reviewed-by: Marcus Tillmanns --- src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index 9c55d5345c4..ca4220ebef4 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -837,6 +837,7 @@ void PathChooserField::setup(JsonFieldPage *page, const QString &name) QTC_ASSERT(w, return); page->registerFieldWithName(name, w, "path", SIGNAL(textChanged(QString))); QObject::connect(w, &PathChooser::textChanged, page, &WizardPage::completeChanged); + QObject::connect(w, &PathChooser::validChanged, page, &WizardPage::completeChanged); } bool PathChooserField::validate(MacroExpander *expander, QString *message) From 0fba429032504cbaa6f9e3879fa9ba399a67767a Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 10 Jul 2024 23:15:56 +0200 Subject: [PATCH 03/46] Core: Use better suited file dialog when saving OutputWindow content QFileDialog::saveFileContent opens a non-modal file dialog which can disappear in the backgtound. Also, on Windows, the dialog is non-native. Use FileUtils::getSaveFilePath and FileSaver, instead. Task-number: QTCREATORBUG-31099 Change-Id: I0c84e149183f632e325b2e62ee9b1c7d7726f207 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/outputwindow.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index 4183a8457ca..d4d2a898895 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -13,9 +13,12 @@ #include +#include #include #include +#include + #include #include #include @@ -294,7 +297,16 @@ void OutputWindow::contextMenuEvent(QContextMenuEvent *event) menu->addSeparator(); QAction *saveAction = menu->addAction(Tr::tr("Save Contents...")); connect(saveAction, &QAction::triggered, this, [this] { - QFileDialog::saveFileContent(toPlainText().toUtf8(), d->outputFileNameHint); + const FilePath file = FileUtils::getSaveFilePath( + ICore::dialogParent(), {}, FileUtils::homePath() / d->outputFileNameHint); + if (!file.isEmpty()) { + QString error; + Utils::TextFileFormat format; + format.codec = EditorManager::defaultTextCodec(); + format.lineTerminationMode = EditorManager::defaultLineEnding(); + if (!format.writeFile(file, toPlainText(), &error)) + MessageManager::writeDisrupting(error); + } }); saveAction->setEnabled(!document()->isEmpty()); From 350ede8d5bbb9663bcc7a0674a334f746f110709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Wed, 17 Jul 2024 13:23:47 +0200 Subject: [PATCH 04/46] German translation: Improve compilers' default names %5 is the executable's path so translating "at" to "an" does not fit. Change-Id: I3135164ba2b7d12d9cf685efcde5b695dfb5021f Reviewed-by: Eike Ziller --- share/qtcreator/translations/qtcreator_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 90436e62b88..65c29af732a 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -41022,7 +41022,7 @@ Aktivieren Sie dies, wenn Sie 32bit-x86-Binärdateien erstellen wollen, ohne ein %1 (%2, %3 %4 at %5) - %1 (%2, %3 %4 an %5) + %1 (%2, %3 %4: %5) Remove From fddf5693abf9d8f942e71f0be315c1284e590118 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 17 Jul 2024 08:50:29 +0200 Subject: [PATCH 05/46] Editors: Fix that releasing Ctrl sometimes does not close the chooser On some platforms, after pressing Ctrl+Tab to switch files and then releasing Ctrl, the chooser didn't close because the key event claimed both that Ctrl was the released key but Ctrl was still pressed. Add a workaround. Fixes: QTCREATORBUG-31228 Task-number: QTCREATORBUG-27378 Change-Id: Ifd83e655f0d3dca7e15dfbd822ec1893045b304c Reviewed-by: Christian Stenger --- src/plugins/coreplugin/editormanager/openeditorswindow.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp index cf98617261d..519d0ff954c 100644 --- a/src/plugins/coreplugin/editormanager/openeditorswindow.cpp +++ b/src/plugins/coreplugin/editormanager/openeditorswindow.cpp @@ -201,6 +201,9 @@ bool OpenEditorsWindow::eventFilter(QObject *obj, QEvent *e) auto ke = static_cast(e); qCDebug(openEditorsLog()) << ke; if (ke->modifiers() == 0 + /* On some platforms, the key event can claim both that Ctrl is released and that + Ctrl is still pressed, see QTCREATORBUG-31228 */ + || (ke->modifiers() == Qt::ControlModifier && ke->key() == Qt::Key_Control) /*HACK this is to overcome some event inconsistencies between platforms*/ || (ke->modifiers() == Qt::AltModifier && (ke->key() == Qt::Key_Alt || ke->key() == -1))) { From 49bb87287c03de9f62a2e12bb2e5327c80fba1d6 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 17 Jul 2024 15:19:01 +0200 Subject: [PATCH 06/46] Core: Fix include Amends 0fba429032504cbaa6f9e3879fa9ba399a67767a. Change-Id: I47063d820ca65a852bc4ef9b5c96f380421e3c41 Reviewed-by: Eike Ziller --- src/plugins/coreplugin/outputwindow.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index d4d2a898895..66fbbf6d076 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -10,6 +10,7 @@ #include "editormanager/editormanager.h" #include "find/basetextfind.h" #include "icore.h" +#include "messagemanager.h" #include @@ -17,8 +18,6 @@ #include #include -#include - #include #include #include From 19f5099c93ad34dad6357241b916e0865f77b2d0 Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Thu, 11 Jul 2024 13:22:36 +0200 Subject: [PATCH 07/46] StudioWelcome: fix crashes when setupWizard fails Task-number: QDS-13209 Change-Id: I5751de9d5a5c8065a7cbad91c048d7d4d60de238 Reviewed-by: Tim Jenssen --- src/plugins/studiowelcome/qdsnewdialog.cpp | 22 ++++++++++----------- src/plugins/studiowelcome/qdsnewdialog.h | 5 +++-- src/plugins/studiowelcome/wizardhandler.cpp | 5 ++++- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/plugins/studiowelcome/qdsnewdialog.cpp b/src/plugins/studiowelcome/qdsnewdialog.cpp index 671670f609f..54dec46f74f 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.cpp +++ b/src/plugins/studiowelcome/qdsnewdialog.cpp @@ -49,7 +49,7 @@ QString uniqueProjectName(const QString &path) /***********************/ QdsNewDialog::QdsNewDialog(QWidget *parent) - : m_dialog{new QQuickWidget(parent)} + : m_dialog{Utils::makeUniqueObjectPtr(parent)} , m_categoryModel{new PresetCategoryModel(&m_presetData, this)} , m_presetModel{new PresetModel(&m_presetData, this)} , m_screenSizeModel{new ScreenSizeModel(this)} @@ -57,7 +57,7 @@ QdsNewDialog::QdsNewDialog(QWidget *parent) , m_recentsStore{"RecentPresets.json", StorePolicy::UniqueValues} , m_userPresetsStore{"UserPresets.json", StorePolicy::UniqueNames} { - setParent(m_dialog); + connect(m_dialog.get(), &QObject::destroyed, this, &QObject::deleteLater); m_recentsStore.setReverseOrder(); m_recentsStore.setMaximum(10); @@ -89,9 +89,10 @@ QdsNewDialog::QdsNewDialog(QWidget *parent) m_dialog->installEventFilter(this); QObject::connect(&m_wizard, &WizardHandler::wizardCreationFailed, this, [this] { - QMessageBox::critical(m_dialog, tr("New Project"), tr("Failed to initialize data.")); + // TODO: if the dialog itself could react on the error + // the would not be necessary + QMessageBox::critical(m_dialog.get(), tr("New Project"), tr("Failed to initialize data.")); reject(); - deleteLater(); }); QObject::connect(m_styleModel.data(), &StyleModel::modelAboutToBeReset, this, [this] { @@ -101,7 +102,7 @@ QdsNewDialog::QdsNewDialog(QWidget *parent) bool QdsNewDialog::eventFilter(QObject *obj, QEvent *event) { - if (obj == m_dialog && event->type() == QEvent::KeyPress + if (obj == m_dialog.get() && event->type() == QEvent::KeyPress && static_cast(event)->key() == Qt::Key_Escape) { reject(); return true; @@ -314,7 +315,7 @@ void QdsNewDialog::setWizardFactories(QList factories_, { Utils::Id platform = Utils::Id::fromSetting("Desktop"); - WizardFactories factories{factories_, m_dialog, platform}; + WizardFactories factories{factories_, m_dialog.get(), platform}; std::vector recents = m_recentsStore.fetchAll(); std::vector userPresets = m_userPresetsStore.fetchAll(); @@ -404,8 +405,6 @@ void QdsNewDialog::accept() m_recentsStore.save(preset); m_dialog->close(); - m_dialog->deleteLater(); - m_dialog = nullptr; } void QdsNewDialog::reject() @@ -415,12 +414,13 @@ void QdsNewDialog::reject() m_wizard.destroyWizard(); m_dialog->close(); - m_dialog = nullptr; + m_dialog.reset(); } QString QdsNewDialog::chooseProjectLocation() { - Utils::FilePath newPath = Utils::FileUtils::getExistingDirectory(m_dialog, tr("Choose Directory"), + Utils::FilePath newPath = Utils::FileUtils::getExistingDirectory(m_dialog.get(), + tr("Choose Directory"), m_qmlProjectLocation); return QDir::toNativeSeparators(newPath.toString()); @@ -473,7 +473,7 @@ void QdsNewDialog::savePresetDialogAccept() UserPresetData preset = currentUserPresetData(m_qmlPresetName); if (!m_userPresetsStore.save(preset)) { - QMessageBox::warning(m_dialog, + QMessageBox::warning(m_dialog.get(), tr("Save Preset"), tr("A preset with this name already exists.")); return; diff --git a/src/plugins/studiowelcome/qdsnewdialog.h b/src/plugins/studiowelcome/qdsnewdialog.h index f4f24d1810a..95bfa52fe9b 100644 --- a/src/plugins/studiowelcome/qdsnewdialog.h +++ b/src/plugins/studiowelcome/qdsnewdialog.h @@ -7,6 +7,7 @@ #include #include +#include #include "wizardhandler.h" #include "presetmodel.h" @@ -64,7 +65,7 @@ public: explicit QdsNewDialog(QWidget *parent); - QWidget *widget() override { return m_dialog; } + QWidget *widget() override { return m_dialog.get(); } void setWizardFactories(QList factories, const Utils::FilePath &defaultLocation, const QVariantMap &extraVariables) override; @@ -139,7 +140,7 @@ private slots: void onWizardCreated(QStandardItemModel *screenSizeModel, QStandardItemModel *styleModel); private: - QQuickWidget *m_dialog = nullptr; + Utils::UniqueObjectPtr m_dialog; PresetData m_presetData; QPointer m_categoryModel; diff --git a/src/plugins/studiowelcome/wizardhandler.cpp b/src/plugins/studiowelcome/wizardhandler.cpp index 961fb701eeb..b86d33a1dfb 100644 --- a/src/plugins/studiowelcome/wizardhandler.cpp +++ b/src/plugins/studiowelcome/wizardhandler.cpp @@ -53,7 +53,10 @@ void WizardHandler::setupWizard() initializeProjectPage(m_wizard->page(0)); initializeFieldsPage(m_wizard->page(1)); - + if (!m_detailsPage) { + emit wizardCreationFailed(); + return; + } auto *screenFactorModel = getScreenFactorModel(m_detailsPage); auto *styleModel = getStyleModel(m_detailsPage); From 2d3c9b3ffd02ef95f9cc039b1cf2e9c203e7040c Mon Sep 17 00:00:00 2001 From: Alexandre Laurent Date: Thu, 11 Jul 2024 21:17:23 +0200 Subject: [PATCH 08/46] French translations for 14.0 Change-Id: I17c9adfbe88bfac05208a84b9219de18301e7984 Reviewed-by: Johnny Jazeix Reviewed-by: Oswald Buddenhagen Reviewed-by: Olivier Delaune Reviewed-by: Eike Ziller --- share/qtcreator/translations/qtcreator_fr.ts | 3329 +++++++++++------- 1 file changed, 2119 insertions(+), 1210 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_fr.ts b/share/qtcreator/translations/qtcreator_fr.ts index ff5318759a9..5f03828b04d 100644 --- a/share/qtcreator/translations/qtcreator_fr.ts +++ b/share/qtcreator/translations/qtcreator_fr.ts @@ -798,6 +798,10 @@ Utilisez AmbientSound.Infinite pour boucler indéfiniment. New Effect Nouvel effet + + Add to Content Library + Ajouter à la bibliothèque de contenus + AudioEngineSection @@ -1388,6 +1392,37 @@ Le chemin doit être relatif. L’URL de la ressource pour l’icône. + + CameraSpeedConfigAction + + Open camera speed configuration dialog + Ouvrir la fenêtre de configuration de la vitesse de la caméra + + + + CameraSpeedConfigurationDialog + + Camera Speed Configuration + Configuration de la vitesse de la caméra + + + The speed camera moves when controlled by keyboard. + La vitesse de déplacement de la caméra lorsque contrôlée par le clavier. + + + Multiplier + Multiplicateur + + + The value multiplier for the speed slider. + ou facteur ? + Le multiplicateur de valeur pour le slider de vitesse. + + + Reset + Réinitialiser + + CameraToggleAction @@ -1582,170 +1617,6 @@ Le chemin doit être relatif. Appliquer - - CollectionDetailsToolbar - - Add property left - Ajouter une propriété à gauche - - - Add property right - Ajouter une propriété à droite - - - Delete selected property - Supprimer la propriété sélectionnée - - - Insert row below - Insérer une ligne en dessous - - - Insert row above - Insérer une ligne au-dessus - - - Delete selected row - Supprimer la ligne sélectionnée - - - Save changes - Enregistrer les changements - - - Export model - Exporter le modèle - - - Add Column - Ajouter une colonne - - - Column name: - Nom de la colonne : - - - The model already contains "%1"! - « %1 » est déjà contenu dans le modèle ! - - - Type: - Type : - - - Add - Ajouter - - - Cancel - Annuler - - - - CollectionDetailsView - - Edit - Modifier - - - Delete - Supprimer - - - Sort Ascending - Tri croissant - - - Sort Descending - Tri décroissant - - - Add row above - Ajouter une ligne au-dessus - - - Add row below - Ajouter une ligne en dessous - - - Delete this row - Supprimer cette ligne - - - Select a model to continue - Sélectionner un modèle pour continuer - - - Delete Column - Supprimer la colonne - - - Are you sure that you want to delete column "%1"? - Voulez-vous vraiment supprimer la colonne « %1 » ? - - - Cancel - Annuler - - - - CollectionItem - - Delete - Supprimer - - - Rename - Renommer - - - Assign to the selected node - Assigner au nœud sélectionné - - - Deleting the model - Suppression du modèle - - - Are you sure that you want to delete model "%1"? -The model will be deleted permanently. - Êtes-vous sûr de vouloir supprimer le modèle « %1 » ? -Le modèle sera définitivement supprimé. - - - Are you sure that you want to delete model "%1"? -The model will be removed from the project but the file will not be deleted. - Voulez-vous vraiment supprimer le modèle « %1 » ? -Le modèle sera retiré du projet mais le fichier ne sera pas supprimé. - - - Rename model - Renommer le modèle - - - Cancel - Annuler - - - New name: - Nouveau nom : - - - - CollectionView - - Data Models - Modèles de données - - - Import a model - Importer un modèle - - - Add a new model - Ajouter un nouveau modèle - - ColorAnimationSpecifics @@ -1885,10 +1756,26 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Column spacing Espacement des colonnes + + Sets the space between the items in pixels in the <b>Column Layout</b>. + Définit l'espacement en pixels entre les éléments de l'<b>agencement en colonne</b>. + Layout direction Direction du layout + + Sets the direction of the item flow in the <b>Column Layout</b>. + Définit la direction du flux des éléments de l'<b>agencement en colonne</b>. + + + Uniform cell size + Taille de cellules uniforme + + + Toggles all cells to have a uniform size. + Active/désactive une taille commune pour toutes les cellules. + ColumnSpecifics @@ -2041,6 +1928,29 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Définit l'état du composant. + + ConfirmClearAllDialog + + Confirm clear list + Confirmation du nettoyage de la liste + + + You are about to clear the list of effect nodes. + +This can not be undone. + Vous allez nettoyer la liste de nœuds d'effet. + +Cela ne peut être annulé. + + + Clear + Nettoyer + + + Cancel + Annuler + + ConfirmDeleteFilesDialog @@ -2253,12 +2163,9 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Effects Effets - - - ContentLibraryEffect - Effect is imported to project - L'effet est importé dans le projet + User Assets + Ressources de l'utilisateur @@ -2300,22 +2207,14 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé. - ContentLibraryMaterial + ContentLibraryItem - Material is imported to project - Le matériau est importé dans le projet - - - Add an instance to project - Ajouter une instance au projet - - - Click to download material - Cliquer pour télécharger un matériau + Item is imported to the project + L'élément est importé dans le projet - ContentLibraryMaterialContextMenu + ContentLibraryItemContextMenu Apply to selected (replace) Appliquer à la sélection (remplacer) @@ -2332,6 +2231,25 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Remove from project Supprimer du projet + + Remove from Content Library + Supprimer de la bibliothèque de contenus + + + + ContentLibraryMaterial + + Material is imported to project + Le matériau est importé dans le projet + + + Add an instance to project + Ajouter une instance au projet + + + Click to download material + Cliquer pour télécharger un matériau + ContentLibraryMaterialsView @@ -2424,6 +2342,10 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Add light probe Ajouter une sonde de lumière + + Remove from Content Library + Supprimer de la bibliothèque de contenus + ContentLibraryTexturesView @@ -2436,6 +2358,25 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Aucun résultat. + + ContentLibraryUserView + + No match found. + Aucun résultat. + + + <b>Content Library</b> is not supported in Qt5 projects. + La <b>bibliothèque de contenus</b> n'est pas prise en charge dans les projets Qt5. + + + To use <b>Content Library</b>, first add the QtQuick3D module in the <b>Components</b> view. + Pour utiliser la <b>bibliothèque de contenus</b>, ajoutez d'abord le module QtQuick3D dans la vue <b>Composants</b>. + + + <b>Content Library</b> is disabled inside a non-visual component. + La <b>bibliothèque de contenus</b> est désactivée pour un composant non visible. + + ContextMenu @@ -2533,6 +2474,25 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.millisecondes. + + DeleteBundleItemDialog + + Remove bundle %1 + Supprimer le bundle %1 + + + Are you sure you? The action cannot be undone + Voulez-vous vraiment supprimer le bundle ? Cette action ne peut être annulée + + + Remove + Supprimer + + + Cancel + Annuler + + DesignerActionManager @@ -2625,6 +2585,22 @@ Le modèle sera retiré du projet mais le fichier ne sera pas supprimé.Sets the number by which the dial value changes. Définit l'écart entre deux valeurs du cadran. + + Start angle + Angle de début + + + Sets the starting angle of the dial in degrees. + Définit l'angle, en degrés, à partir duquel démarre le cadran. + + + End angle + Angle de fin + + + Sets the ending angle of the dial in degrees. + Définit l'angle, en degrés, où le cadran prend fin. + Sets how the dial's handle snaps to the steps defined in <b>Step size</b>. @@ -2785,38 +2761,11 @@ définit par la<b>taille du pas</b>. Activer/désactiver l'édition de la lumière - - EditPropertyDialog - - Edit Column - Modifier la colonne - - - Name - Nom - - - Type - Type - - - Conversion from %1 to %2 may lead to data loss - La conversion de %1 vers %2 peut entraîner une perte de données - - - Apply - Appliquer - - - Cancel - Annuler - - EffectComposer Remove all effect nodes. - Supprimer tous les nœuds d'effets. + Supprimer tous les nœuds d'effet. Open Shader in Code Editor. @@ -2832,6 +2781,51 @@ définit par la<b>taille du pas</b>. Le compositeur d'effet est désactivé dans les projets MCU + + EffectComposer::EffectComposerModel + + Animation + Animation + + + Running + En cours d'exécution + + + Set this property to animate the effect. + Définir cette propriété permet d'animer l'effet. + + + Time + Temps + + + This property allows explicit control of current animation time. + À relire + Cette propriété permet le contrôle explicite du temps de l'animation. + + + Frame + Trame + + + This property allows explicit control of current animation frame. + À relire + Cette propriété permet le contrôle explicite de la trame de l'animation. + + + General + Général + + + Extra Margin + Marge supplémentaire + + + This property specifies how much of extra space is reserved for the effect outside the parent geometry. + Cette propriété détermine l'espace supplémentaire réservé hors de la géométrie du parent à l'effet. + + EffectComposer::EffectComposerView @@ -2847,6 +2841,25 @@ définit par la<b>taille du pas</b>. Compositeur d'effet + + EffectComposer::Uniform + + X + X + + + Y + Y + + + Z + Z + + + W + W + + EffectComposerPreview @@ -2858,8 +2871,8 @@ définit par la<b>taille du pas</b>. Zoom arrière - Zoom Fit - Ajuster + Reset View + Réinitialiser la vue Restart Animation @@ -2898,14 +2911,13 @@ définit par la<b>taille du pas</b>. 2. Adjust the effect nodes properties 3. Change the order of the effects, if you like 4. See the preview -5. Save in the library, if you wish to reuse the effect later - Pour utiliser le ... ? +5. Save in the assets library, if you wish to reuse the effect later Comment utiliser le compositeur d'effet : 1. Cliquer sur « + Ajouter un effet » pour ajouter un nœud d'effet 2. Ajuster les propriétés des nœuds d'effet 3. Changer l'ordre des effets, si vous le souhaitez 4. Voir la prévisualisation -5. Enregistrer l'effet dans la bibliothèque, si vous souhaitez le réutiliser plus tard +5. Enregistrer l'effet dans la bibliothèque de ressources, si vous souhaitez le réutiliser plus tard @@ -2919,6 +2931,13 @@ définit par la<b>taille du pas</b>. Activer/désactiver le nœud + + EffectCompositionNodeUniform + + Reset value + Réinitialiser la valeur + + EffectNode @@ -2933,6 +2952,143 @@ définit par la<b>taille du pas</b>. + Ajouter un effet + + EffectsSection + + Effects <a style="color:%1;">[beta]</a> + Effets <a style="color:%1;">[bêta]</a> + + + Remove Effects + Supprimer les effets + + + Add Effects + Ajouter des effets + + + Adds visual effects on the component. + Ajoute des effets visuels au composant. + + + Visible + Visible + + + Toggles the visibility of visual effects on the component. + Active/désactive la visibilité des effets visuels du composant. + + + Layer Blur + Inspiration: https://docs.krita.org/fr/reference_manual/filters/blur.html + Filtre de floutage + + + Toggles the visibility of the <b>Layer Blur</b> on the component. + Active/désactive la visibilité du <b>filtre de floutage</b> du composant. + + + Blur + Flou + + + Sets the intensity of the <b>Layer Blur</b> on the component. + Définit l'intensité du <b>filtre de floutage</b> du composant. + + + Background Blur + Floutage du fond + + + Toggles the visibility of blur on the selected background component. + Active/désactive le floutage pour le composant en arrière-plan sélectionné. + + + Sets the intensity of blur on the selected background component. +The foreground component should be transparent, and the background component should be opaque. + Définit l'intensité du flou pour le composant en arrière-plan sélectionné. +Les composants au premier plan doivent être transparents et le composant en arrière-plan doit être opaque. + + + Background + Arrière plan + + + Sets a component as the background of a transparent component.The <b>Background Blur</b> works only on this component. The component should be solid. + Définit le composant comme arrière-plan d'un composant transparent. Le <b>floutage du fond</b> s'appliquera seulement sur ce composant. Le composant doit être opaque. + + + Drop Shadow + Ombre portée ? + Ombrage extérieur + + + Inner Shadow + Ombrage intérieur + + + Toggles the visibility of the component shadow. + Active/désactive l'ombrage du composant. + + + Sets the softness of the component shadow. A larger value causes the edges of the shadow to appear more blurry. + Définit la douceur de l'ombrage du composant. Une plus grande valeur rend les bordures de l'ombre plus floues. + + + Spread + Étendue + + + Resizes the base shadow of the component by pixels. + A revoir + Redimensionne la base de l'ombrage du composant en pixels. + + + Only supported for Rectangles. + Uniquement disponible avec les rectangles. + + + Color + Couleur + + + Sets the color of the shadow. + Définit la couleur de l'ombrage. + + + Offset + Décalage + + + Moves the shadow with respect to the component in X and Y coordinates by pixels. + Déplace ? + Décale l'ombrage par rapport au composant en X et Y, en pixels. + + + X-coordinate + Coordonnée X + + + Y-coordinate + Coordonnée Y + + + Show behind + Afficher derrière + + + Toggles the visibility of the shadow behind a transparent component. + Active/désactive l'ombrage derrière un composant transparent. + + + Add Shadow Effect + Ajouter un effet d'ombrage + + + Adds <b>Drop Shadow</b> or <b>Inner Shadow</b> effects to a component. + Ajoute un effet d'<b>ombrage extérieur</b> ou d'<b>ombrage intérieur</b> au composant. + + EmptyMaterialEditorPane @@ -3050,6 +3206,25 @@ définit par la<b>taille du pas</b>. Ajuster l’objet sélectionné à la vue + + FlagsComboBox + + empty + vide + + + %1 items selected + %1 éléments sélectionnés + + + Select All + Tout sélectionner + + + Select None + Tout désélectionner + + FlickableGeometrySection @@ -3569,18 +3744,50 @@ définit par la<b>taille du pas</b>. Columns & Rows Colonnes & lignes + + Sets the number of columns and rows in the <b>Grid Layout</b>. + Définit le nombre de colonnes et de lignes de l'<b>agencement en grille</b>. + Spacing Espacement + + Sets the space between the items in pixels in the rows and columns in the <b>Grid Layout</b>. + Définit l'espacement en pixels entre les éléments des lignes et colonnes dans l'<b>agencement en grille</b>. + Flow Flux + + Set the direction of dynamic items to flow in rows or columns in the <b>Grid Layout</b>. + Définit la direction du flux des éléments dynamiques dans les lignes et colonnes de l'<b>agencement en grille</b>. + Layout direction Direction du layout + + Sets the direction of the dynamic items left to right or right to left in the <b>Grid Layout</b>. + Définit la direction du flux des éléments dynamiques de gauche à droite ou de droite à gauche de l'<b>agencement en grille</b>. + + + Uniform cell sizes + Taille de cellules uniforme + + + Toggles all cells to have a uniform height or width. + Active/désactive une hauteur et largeur commune pour toutes les cellules. + + + Heights + Hauteurs + + + Widths + Largeurs + GridSpecifics @@ -3951,57 +4158,6 @@ ajouter un composant en surbrillance. Inverse l'image horizontalement. - - ImportDialog - - Import a model - Importer un modèle - - - Model path - Chemin du modèle - - - Select a model file - Sélectionner un fichier de modèle - - - Open - Ouvrir - - - Could not load the file - Impossible de charger le fichier - - - An error occurred while trying to load the file. - Une erreur s'est produite lors de la lecture du fichier. - - - File name - Nom du fichier - - - The model name - Le nom du modèle - - - File name can not be empty - Le nom du fichier ne peut pas être vide - - - The model name can not be empty - Le nom du modèle ne peut pas être vide - - - Import - Importer - - - Cancel - Annuler - - InsetSection @@ -4061,6 +4217,25 @@ ajouter un composant en surbrillance. Définit le nom de l'objet du composant. + + InvalidIdException + + Only alphanumeric characters and underscore allowed. +Ids must begin with a lowercase letter. + Seuls les caractères alphanumériques et les tirets du bas sont acceptés. +Les identifiants doivent commencer avec une lettre minuscule. + + + Ids have to be unique. + Les identifiants doivent être uniques. + + + Invalid Id: %1 +%2 + Identifiant invalide : %1 +%2 + + ItemDelegateSection @@ -4695,6 +4870,14 @@ ajouter un composant en surbrillance. Share Partager + + Share your project online. + Partager votre projet en ligne. + + + Sharing your project online is disabled in the Community Version. + Le partage du projet en ligne est désactivé dans la version communautaire. + More Items Plus d'éléments @@ -4915,6 +5098,10 @@ ajouter un composant en surbrillance. Create New Material Créer un nouveau matériau + + Add to Content Library + Ajouter à la bibliothèque de contenus + MaterialEditorToolBar @@ -5025,13 +5212,6 @@ ajouter un composant en surbrillance. Sortie vidéo cible. - - Message - - Close - Fermer - - ModelNodeOperations @@ -5227,38 +5407,7 @@ Erreur : Reparenting the component %1 here will cause the component %2 to be deleted. Do you want to proceed? - Redéfinir ici le parent du composant %1 entrainera la suppression du composant %2. Voulez-vous continuer ? - - - - NewCollectionDialog - - Add a new Model - Ajouter un nouveau modèle - - - Model - Modèle - - - The model name - Le nom du modèle - - - The model name can not be empty - Le nom du modèle ne peut pas être vide - - - The model name already exists %1 - Le nom de modèle « %1 » existe déjà - - - Create - Créer - - - Cancel - Annuler + Redéfinir ici le parent du composant %1 entraînera la suppression du composant %2. Voulez-vous continuer ? @@ -5776,6 +5925,13 @@ ajouter un composant en surbrillance. Violation d'ordre des événements MMAP entre les vidages de tampons détectée. Le moment de l'événement est: %1, temps maximum depuis le dernier vidage: %2. Cela peut interrompre l'analyse des données. + + PluginManager + + Failed Plugins + Greffons en échec + + PopupLabel @@ -5972,6 +6128,17 @@ est en cours. Cette propriété n’est pas disponible dans cette configuration. + + PuppetStarter + + Puppet is starting... + Démarrage de Puppet… + + + You can now attach your debugger to the %1 puppet with process id: %2. + Vous pouvez maintenant attacher votre débogueur au mode puppet %1 avec l'identifiant de processus : %2. + + QAbstractFileIconProvider @@ -6226,6 +6393,34 @@ Souhaitez-vous éditer cet effet ? Minimize Minimiser + + ID cannot start with an uppercase character (%1). + L'identifiant ne peut pas commencer avec un caractère majuscule (%1). + + + ID cannot start with a number (%1). + L'identifiant ne peut pas commencer avec un chiffre (%1). + + + ID cannot include whitespace (%1). + L'identifiant ne peut pas contenir d'espace (%1). + + + %1 is a reserved QML keyword. + %1 est un mot clé QML réservé. + + + %1 is a reserved property keyword. + %1 est un mot clé de propriété réservé. + + + ID includes invalid characters (%1). + L'identifiant contient des caractères invalides (%1). + + + Empty document + Document vide + QmlDesigner::AbstractEditorDialog @@ -6721,150 +6916,6 @@ Export des ressources : %2 Lie ce composant à la propriété du parent sélectionnée. - - QmlDesigner::CollectionSourceModel - - Node is not indexed in the models. - Le nœud n'est pas indexé dans les modèles. - - - Node should be a JSON model. - Le nœud doit être un modèle JSON. - - - A model with the identical name already exists. - Un modèle portant ce nom existe déjà. - - - Selected node must have a valid source file address - Le nœud sélectionné contient une adresse de fichier source valide - - - Can't read or write "%1". -%2 - Impossible de lire ou d'écrire « %1 ». -%2 - - - "%1" is corrupted. -%2 - « %1 » est corrompu. -%2 - - - Can't clean "%1". - Impossible de nettoyer « %1 ». - - - Can't write to "%1". - Impossible d'écrire dans « %1 ». - - - No model is available for the JSON model group. - Aucun modèle n'est disponible pour le groupe de modèles JSON. - - - JSON document type should be an object containing models. - Le type de document JSON doit être un objet contenant des modèles. - - - Rename Model - Renommer le modèle - - - Invalid node - Nœud invalide - - - Can't rename the node - Impossible de renommer le nœud - - - Invalid node type - Type de nœud invalide - - - The model group doesn't contain the old model name (%1). - Le groupe de modèles ne contient pas l'ancien nom du modèle (%1). - - - The model name "%1" already exists in the model group. - Le nom de modèle « %1 » existe déjà dans le groupe de modèles. - - - Delete Model - Supprimer le modèle - - - The selected node has an invalid source address - Le nœud sélectionné contient une adresse source invalide - - - The model group doesn't contain the model name (%1). - Le groupe de modèles ne contient pas le nom du modèle (%1). - - - - QmlDesigner::CollectionView - - Model Editor - Éditeur de modèle - - - Model Editor view - Vue de l'éditeur de modèle - - - - QmlDesigner::CollectionWidget - - Model Editor - Title of model editor widget - Éditeur de modèle - - - Cannot Create QtQuick View - Impossible de créer une vue QtQuick - - - StatesEditorWidget: %1 cannot be created.%2 - StatesEditorWidget : %1 ne peut être créé.%2 - - - File error - Erreur de fichier - - - Can not open the file to write. - - Impossible d'ouvrir le fichier en écriture. - - - - Can not add a model to the JSON file - Impossible d'ajouter un modèle au fichier JSON - - - The imported model is empty or is not supported. - Le modèle importé est vide ou non pris en charge. - - - Can not import to the main model - Impossible d'importer au modèle principal - - - The data store is not available. - Le stockage des données n'est pas disponible. - - - The default model node is not available. - Le nœud de modèle par défaut n'est pas disponible. - - - Failed to add a model to the default model group - Échec lors de l'ajout du modèle au groupe de modèles par défaut - - QmlDesigner::ColorTool @@ -6965,12 +7016,35 @@ Export des ressources : %2 Connexions + + QmlDesigner::ContentLibraryUserModel + + Materials + Matériaux + + + Textures + Textures + + + 3D + 3D + + QmlDesigner::ContentLibraryView Content Library Bibliothèque de contenus + + 3D Item Exists + L'élément 3D existe déjà + + + A 3D item with the same name '%1' already exists in the Content Library, are you sure you want to overwrite it? + Un élément 3D portant le même nom '%1' existe déjà dans la bibliothèque de contenus. Souhaitez-vous l'écraser ? + QmlDesigner::ContentLibraryWidget @@ -7095,11 +7169,30 @@ Export des ressources : %2 - QmlDesigner::DocumentWarningWidget + QmlDesigner::DocumentMessage - Always ignore these warnings about features not supported by Qt Quick Designer. - Toujours ignorer les avertissements liés aux fonctionnalités non supportées par Qt Quick Designer. + Error parsing + Erreur d'analyse + + Internal error + Erreur interne + + + line %1 + + ligne %1 + + + + column %1 + + colonne %1 + + + + + QmlDesigner::DocumentWarningWidget Cannot open this QML document because of an error in the QML file: Impossible d'ouvrir ce document QML à cause d'une erreur dans le fichier QML : @@ -7109,8 +7202,12 @@ Export des ressources : %2 OK - This QML file contains features which are not supported by Qt Quick Designer at: - Ce fichier QML contient des fonctionnalités qui ne sont pas supportées par Qt Quick Designer : + Turn off warnings about unsupported Qt Design Studio features. + Désactiver les avertissements à propos des fonctionnalités Qt Design Studio non prises en charge. + + + This QML file contains features which are not supported by Qt Design Studio at: + Ce fichier QML contient des fonctionnalités qui ne sont pas supportées par Qt Design Studio : Ignore @@ -7335,6 +7432,10 @@ Export des ressources : %2 Reset all shading options for all viewports. Réinitialiser toutes les options de rendu pour toutes les vues. + + Add to Content Library + Ajouter à la bibliothèque de contenus + 3D view is not supported in MCU projects. La vue 3D n'est pas prise en charge dans les projets MCU. @@ -7392,6 +7493,13 @@ Export des ressources : %2 Liste d'événements + + QmlDesigner::FileExtractor + + Choose Directory + Sélectionner un répertoire + + QmlDesigner::FilePathModel @@ -7542,6 +7650,13 @@ Export des ressources : %2 QML Resource File (*.qrc) Fichier de ressource QML (*.qrc) + + Successfully generated QRC resource file + %1 + ressoures ? + Fichier de ressource QRC généré avec succès + %1 + Generate Deployable Package... Générer un paquet déployable… @@ -7551,23 +7666,33 @@ Export des ressources : %2 Enregistrer le projet en tant que ressource - QML Resource File (*.qmlrc);;Resource File (*.rcc) - Fichier de ressource QML (*.qmlrc);;Fichier de ressource (*.rcc) + Generating deployable package. Please wait... + Génération du paquet déployable. Veuillez patienter… - Generate a resource file out of project %1 to %2 - Générer un fichier de ressource en dehors du projet %1 vers %2 + Failed to generate deployable package! + Échec de génération du paquet déployable ! + + + Error + Erreur + + + Failed to generate deployable package! + +Please check the output pane for more information. + Échec de génération du paquet déployable ! + +Veuillez vérifier le panneau de sortie pour plus d'informations. + + + Successfully generated deployable package + Génération du paquet déployable réussie Success Réussite - - Successfully generated deployable package - %1 - Génération du paquet déployable réussie - %1 - QmlDesigner::GlobalAnnotationDialog @@ -7718,6 +7843,59 @@ Export des ressources : %2 Réinitialiser l'espace de travail actif + + QmlDesigner::Internal::MetaInfoPrivate + + Invalid meta info + Métadonnées invalides + + + + QmlDesigner::Internal::MetaInfoReader + + Illegal state while parsing. + État illégal lors de l'analyse. + + + No property definition allowed. + Aucune définition de propriété permise. + + + Invalid type %1 + Type %1 invalide + + + Unknown property for Type %1 + Propriété inconnue pour le type %1 + + + Unknown property for ItemLibraryEntry %1 + Propriété inconnue pour ItemLibraryEntry %1 + + + Unknown property for Property %1 + Propriété inconnue pour Property %1 + + + Unknown property for QmlSource %1 + Propriété inconnue pour QmlSource %1 + + + Unknown property for ExtraFile %1 + Propriété inconnue pour ExtraFile %1 + + + Invalid or duplicate library entry %1 + Entrée de bibliothèque %1 invalide ou dupliquée + + + + QmlDesigner::Internal::ModelPrivate + + Exception thrown by view %1. + Exception lancée par la vue %1. + + QmlDesigner::Internal::SettingsPage @@ -7733,6 +7911,14 @@ Export des ressources : %2 Canvas Canevas + + If you select this radio button, Qt Design Studio always uses the QML emulation layer (QML Puppet) located at the following path. + Si vous sélectionnez ce bouton radio, Qt Design Studio utilisera toujours la couche d'émulation QML (QML Puppet) située au chemin suivant. + + + Warns about QML features that are not properly supported by the Qt Design Studio. + Avertit à propos des fonctionnalités QML qui ne sont pas prises en charge par Qt Design Studio. + Debugging Débogage @@ -7761,10 +7947,6 @@ Export des ressources : %2 Use fallback QML emulation layer Utiliser la couche d'émulation QML de secours - - If you select this radio button, Qt Quick Designer always uses the QML emulation layer (QML Puppet) located at the following path. - Si vous sélectionnez ce bouton radio, Qt Quick Designer utilisera toujours la couche d'émulation QML (QML Puppet) se trouvant au chemin suivant. - Path to the QML emulation layer executable (qmlpuppet). Chemin de l'exécutable de la couche d'émulation QML (qmlpuppet). @@ -7798,10 +7980,6 @@ Export des ressources : %2 Warn about unsupported features in .ui.qml files Avertir à propos des fonctionnalités non supportées dans les fichiers .ui.qml - - Warns about QML features that are not properly supported by the Qt Quick Designer. - Avertit à propos des fonctionnalités QML qui ne sont pas supportées par Qt Quick Designer. - Warn about using .qml files instead of .ui.qml files Avertir à propos de l'utilisation des fichiers .qml à la place des fichiers .ui.qml @@ -7967,6 +8145,13 @@ Export des ressources : %2 Propriété inconnue pour ExtraFile %1 + + QmlDesigner::InvalidArgumentException + + Failed to create item of type %1 + Échec lors de la création de l'élément de type %1 + + QmlDesigner::ItemLibraryAssetImportDialog @@ -7989,6 +8174,10 @@ Export des ressources : %2 Select import options and press "Import" to import the following files: Sélectionnez les options d'importation et appuyez sur "Importer" pour importer les fichiers suivants : + + Importing: + Importation de : + Locate 3D Asset "%1" Localiser la ressource 3D « %1 » @@ -8009,6 +8198,18 @@ Export des ressources : %2 Cancel Annuler + + Accept + Accepter + + + Import is ready for preview. + Le fichier importé peut être prévisualisé. + + + Click "Accept" to finish the import or adjust options and click "Import" to import again. + Cliquez sur « Accepter » pour finaliser l'importation ou ajustez les options et cliquez sur « Importer » pour importer à nouveau. + Close Fermer @@ -8072,6 +8273,10 @@ Export des ressources : %2 Could not access temporary asset directory: "%1". Impossible d'accéder au répertoire temporaire des ressources : « %1 ». + + Attempted to reimport non-existing asset: %1 + Tentative de réimportation d'une ressource inexistante : %1 + Failed to create qmldir file for asset: "%1". Échec lors de la création du fichier qmldir pour la ressource : « %1 ». @@ -8272,6 +8477,13 @@ Export des ressources : %2 Vue de l'éditeur de matériau + + QmlDesigner::Model + + Invalid Id + Identifiant invalide + + QmlDesigner::NavigatorSearchWidget @@ -8308,10 +8520,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Invalid Id Identifiant invalide - - %1 is an invalid id. - %1 n’est pas un identifiant valide. - %1 already exists. %1 existe déjà. @@ -8360,6 +8568,21 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Inverser l'ordre des composants + + QmlDesigner::NodeInstanceView + + Qt Quick emulation layer crashed. + La couche d'émulation Qt Quick a planté. + + + Source item: %1 + Élément source : %1 + + + Failed to generate QSB file for: %1 + Échec de génération du fichier QSB pour : %1 + + QmlDesigner::NodeListModel @@ -8495,6 +8718,14 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.The QML file is not currently opened in a QML Editor. Le fichier QML n'est actuellement pas ouvert dans un éditeur QML. + + Qml Designer Lite + Qml Designer Lite + + + The Qml Designer Lite plugin is not enabled. + Le greffon Qml Designer Lite n'est pas activé. + Give Feedback... Faire un retour… @@ -8863,6 +9094,87 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.StatesEditorWidget : %1 ne peut être créé.%2 + + QmlDesigner::StudioConfigSettingsPage + + Qt Design Studio Configuration + Configuration de Qt Design Studio + + + + QmlDesigner::StudioSettingsPage + + Build + Compiler + + + Debug + Déboguer + + + Analyze + Analyser + + + Tools + Outils + + + Enable Experimental Features + Activer les fonctionnalités expérimentales + + + Hide top-level menus with advanced functionality to simplify the UI. <b>Build</b> is generally not required in the context of Qt Design Studio. <b>Debug</b> and <b>Analyze</b> are only required for debugging and profiling. <b>Tools</b> can be useful for bookmarks and git integration. + Cache les fonctionnalités avancées des menus de haut niveau pour simplifier l'interface. Le bouton <b>Compiler</b> n'est généralement pas nécessaire dans le contexte de Qt Design Studio. Les boutons <b>Déboguer</b> et <b>Analyser</b> ne sont nécessaires que pour le débogage et le profilage. Le bouton <b>Outils</b> peut être utile pour les signets et l'intégration Git. + + + Hide Menu + Cacher les menus + + + Examples + Exemples + + + Examples path: + Chemin des exemples : + + + Reset Path + Réinitialiser le chemin + + + Bundles + Bundles + + + Bundles path: + Chemin des bundles : + + + Experimental Features + Fonctionnalités expérimentales + + + This option enables experimental features in Qt Design Studio. Please provide feedback and bug reports at: %1 + Cette option active les fonctionnalités expérimentale dans Qt Design Studio. Veuillez envoyer vos retours et rapport de bogues à l'adresse : %1 + + + The menu visibility change will take effect after restart. + Le changement de la visibilité des menus prendra effet après le redémarrage. + + + Changing bundle path will take effect after restart. + Le changement du chemin des bundles prendra effet après le redémarrage. + + + + QmlDesigner::SubComponentManager + + My 3D Components + Mes composants 3D + + QmlDesigner::SwitchLanguageComboboxAction @@ -8897,6 +9209,26 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Vue du code + + QmlDesigner::TextToModelMerger + + No import statements found. + instruction? + Aucune mention d'importation n'a été trouvée. + + + Qt Quick 6 is not supported with a Qt 5 kit. + Qt Quick 6 n'est pas pris en charge avec un kit Qt 5. + + + The Design Mode requires a valid Qt kit. + Le mode Design nécessite un kit Qt valide. + + + No import for Qt Quick found. + Aucune importation de Qt Quick n'a été trouvée. + + QmlDesigner::TextureEditorView @@ -9006,10 +9338,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Invalid Id Identifiant invalide - - %1 is an invalid id. - %1 n’est pas un identifiant valide. - %1 already exists. %1 existe déjà. @@ -9073,10 +9401,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Invalid Id Identifiant invalide - - %1 is an invalid id. - %1 n’est pas un identifiant valide. - %1 already exists. %1 existe déjà. @@ -9360,10 +9684,6 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Invalid ID Identifiant invalide - - %1 is an invalid ID. - %1 n’est pas un identifiant valide. - %1 already exists. %1 existe déjà. @@ -9396,6 +9716,13 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Outil de transition + + QmlDesigner::View3DTool + + View3D Tool + Outil de vue 3D + + QmlDesignerAddResources @@ -9621,6 +9948,10 @@ Les composants verrouillés ne peuvent être ni modifiés ni sélectionnés.Add Mouse Area Ajouter une zone de souris + + Edit in 3D View + Modifier dans la vue 3D + Open Signal Dialog Ouvrir la boîte de dialogue des signaux @@ -10337,8 +10668,40 @@ Installez-les manuellement après que l'opération en cours soit finie. L'installation des paquets du SDK Android peut échouer si les licences respectives ne sont pas acceptées. - SDK Manager is busy. - Le gestionnaire de SDK est occupé. + Finished successfully. + Terminé avec succès. + + + Installing / Uninstalling selected packages... + Installation/désinstallation des paquets sélectionnés… + + + Closing the preferences dialog will cancel the running and scheduled SDK operations. + La fermeture de la boîte de dialogue des préférences annulera les opération SDK en cours et planifiées. + + + Closing the options dialog will cancel the running and scheduled SDK operations. + La fermeture de la boîte de dialogue des options annulera les opérations du SDK en cours et planifiées. + + + Uninstalling %1... + Désinstallation de %1… + + + Installing %1... + Installation de %1… + + + Updating installed packages... + Mise à jour des paquets installés… + + + [Packages to be uninstalled:] + [Paquets à désinstaller :] + + + [Packages to be installed:] + [Paquets à installer :] %n Android SDK packages shall be updated. @@ -10347,68 +10710,6 @@ Installez-les manuellement après que l'opération en cours soit finie. %n paquets de SDK Android doivent être mis à jour. - - [Packages to be uninstalled:] - - [Paquets à désinstaller :] - - - - SDK Manager is busy. Operation cancelled. - Le gestionnaire de SDK est occupé. Opération annulée. - - - Installing/Uninstalling selected packages... - - Installation/désinstallation des paquets sélectionnés… - - - - Closing the %1 dialog will cancel the running and scheduled SDK operations. - - La fermeture de la boîte de dialogue %1 annulera les opérations en cours et planifiées du SDK. - - - - preferences - préférences - - - options - options - - - Updating installed packages... - - Mise à jour des paquets installés… - - - - Android SDK operations finished. - Les opérations du SDK Android sont terminées. - - - Operation cancelled. - - Opération annulée. - - - - -No pending operations to cancel... - - -Aucune opération en cours à annuler… - - - - -Cancelling pending operations... - - -Annulation des opérations en cours… - - SDK Manager Arguments Arguments du gestionnaire de SDK @@ -10825,14 +11126,6 @@ dans le navigateur système pour un téléchargement manuel. JDK location: Emplacement du JDK : - - Could not run: %1 - Impossible de démarrer : %1 - - - No devices found in output of: %1 - Aucun périphérique n’a été trouvé dans la sortie de : %1 - Android Debugger (%1, NDK %2) Débogueur Android (%1, NDK %2) @@ -11025,10 +11318,6 @@ Le kit supporte « %2 », mais le périphérique utilise « %3&#x Cannot find the androiddeployqt tool. Impossible de trouver l'outil androiddeployqt. - - Cannot find the package name from the Android Manifest file "%1". - Impossible de trouver le nom du paquet depuis le fichier Manifest Android « %1 ». - Uninstalling the previous package "%1". Désinstallation du paquet précédent « %1 ». @@ -11057,14 +11346,6 @@ Le kit supporte « %2 », mais le périphérique utilise « %3&#x Installing the app failed with an unknown error. Échec d'installation de l'application avec une erreur inconnue. - - Deployment failed with the following errors: - - - Échec du déploiement avec les erreurs suivantes : - - - Uninstalling the installed package may solve the issue. La désinstallation du paquet installé peut résoudre le problème. @@ -11105,6 +11386,14 @@ Le kit supporte « %2 », mais le périphérique utilise « %3&#x Pulling files necessary for debugging. Envoie des fichiers nécessaires au débogage. + + Cannot find the package name from AndroidManifest.xml nor build.gradle files at "%1". + Impossible de trouver le nom du paquet dans les fichiers AndroidManifest.xml ou build.gradle présents dans le répertoire « %1 ». + + + Deployment failed with the following errors: + Échec du déploiement avec les erreurs suivantes : + Android package (*.apk) Paquet Android (*.apk) @@ -11239,6 +11528,10 @@ Cela ne peut être annulé. Android Device Périphérique Android + + Android support is not yet configured. + La prise en charge d'Android n'a pas encore été configuré. + The device info returned from AvdDialog is invalid. Les informations retournées par le périphérique à travers AvdDialog sont invalides. @@ -11248,8 +11541,8 @@ Cela ne peut être annulé. Version inconnue d'Android. Niveau d'API : %1 - Error creating Android templates. - Erreur lors de la création des modèles Android. + Cannot open "%1". + Impossible d'ouvrir « %1 ». Cannot parse "%1". @@ -11644,14 +11937,6 @@ Les fichiers du répertoire source du paquet Android sont copiés dans le réper Cannot create AVD. Invalid input. Impossible de créer un périphérique AVD. Entrée invalide. - - Could not start process "%1". - Impossible de démarrer le processus « %1 ». - - - Cannot create AVD. Command timed out. - Impossible de créer le périphérique AVD. La commande a expiré. - Emulator Tool Is Missing Les outils de l'émulateur sont manquants @@ -11664,6 +11949,10 @@ Les fichiers du répertoire source du paquet Android sont copiés dans le réper AVD Start Error Erreur de démarrage d'AVD + + Failed to start AVD emulator for "%1" device. + Impossible de démarrer l'émulateur AVD pour le périphérique « %1 ». + Master icon Icône principale @@ -11885,6 +12174,10 @@ Les fichiers du répertoire source du paquet Android sont copiés dans le réper Cancel Annuler + + Verifying package integrity... + Vérification de l'intégrité du paquet… + Unarchiving SDK Tools package... Désarchivage du paquet des outils SDK… @@ -11913,38 +12206,10 @@ Les fichiers du répertoire source du paquet Android sont copiés dans le réper Download from %1 was redirected. Le téléchargement à partir de %1 a été redirigé. - - The operation requires user interaction. Use the "sdkmanager" command-line tool. - L'opération nécessite une intéraction de l'utilisateur. Utilisez l'outil en ligne de commande « sdkmanager ». - - - Updating installed packages. - Mise à jour des paquets installés. - Failed. Échec. - - Done - Fini - - - Installing - Installation - - - Uninstalling - Désinstallation - - - Failed - Échec - - - License command failed. - Échec de la commande de licence. - Revision Révision @@ -12630,6 +12895,10 @@ Exécutable : %2 Warns if a test section does not check any assertion. Avertit si un test ne vérifie aucune assertion. + + Repeat Tests + Répéter les tests + Output on failure Sortie en cas d'échec @@ -12824,10 +13093,6 @@ Voir la documentation de Google Test pour plus d'informations sur les filtr typed avec typage - - Active frameworks: - Cadriciels actifs : - Automatically run tests after build Exécuter automatiquement les tests après la compilation @@ -12844,6 +13109,27 @@ Voir la documentation de Google Test pour plus d'informations sur les filtr Selected Sélectionné + + Apply path filters before scanning for tests. + Appliquer les filtres de chemin avant la recherche des tests. + + + Wildcard expressions for filtering: + Expressions joker pour le filtrage : + + + Add + Ajouter + + + Remove + Supprimer + + + Limit Files to Path Patterns + je ne suis pas certain de cette traduction + Limiter les motifs de fichiers vers chemin + Qt Test Qt Test @@ -13423,6 +13709,14 @@ Cela peut provoquer des problèmes lors de l'exécution. Number of worker threads used when scanning for tests. Nombre de threads utilisés pour la recherche des tests. + + Use a timeout while executing test cases. + Utiliser un délai de dépassement lors de l'exécution des cas de test. + + + Timeout used when executing test cases. This will apply for each test case on its own, not the whole project. Overrides test framework or build system defaults. + Délai de dépassement utilisé lors de l'exécution des cas de tests. Le délai s'applique après chaque cas et non pour le projet complet. Remplace les valeurs par défaut du système de construction et du cadriciel de test. + Automatically scrolls down when new items are added and scrollbar is at bottom. Défile automatiquement vers le bas lors de l'ajout de nouveaux éléments et si la barre de défilement est en bas. @@ -13449,25 +13743,17 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Timeout: Délai d’attente : - - Timeout used when executing each test case. - Délai de dépassement utilisé lors de l'exécution de chaque cas de test. - s s - - Timeout used when executing test cases. This will apply for each test case on its own, not the whole project. - Délai de dépassement utilisé lors de l'exécution de chaque cas de test. Le délai est appliqué à chaque cas de test indépendamment et non à l'intégralité du projet. - Scan threads: Threads de recherche : Selects the test frameworks to be handled by the AutoTest plugin. - Sélectionne le cadriciel de test devant être géré par le plug-in AutoTest. + Sélectionne le cadriciel de test devant être géré par le greffon AutoTest. Framework @@ -13503,7 +13789,7 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Enable or disable test frameworks to be handled by the AutoTest plugin. - Active ou désactive les cadriciels de test devant être gérés par le plug-in AutoTest. + Active ou désactive les cadriciels de test devant être gérés par le greffon AutoTest. Enable or disable grouping of test cases by folder. @@ -13515,7 +13801,7 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec You will not be able to use the AutoTest plugin without having at least one active test framework. - Vous ne pouvez pas utiliser le plug-in AutoTest sans avoir au minimum un cadriciel de test. + Vous ne pouvez pas utiliser le greffon AutoTest sans avoir au minimum un cadriciel de test. Mixing test frameworks and test tools. @@ -13623,6 +13909,10 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Total rows: Nombre de lignes totales : + + No Data + Aucune donnée + Show dashboard Afficher le tableau de bord @@ -13631,6 +13921,18 @@ Avertissement : fonctionnalité expérimentale pouvant entraîner un échec Search for issues Recherche des problèmes + + Open Issue in Dashboard + Ouvrir le problème dans le tableau de bord + + + Open Table in Dashboard + Ouvrir le tableau dans le tableau de bord + + + Copy Dashboard Link to Clipboard + Copier le lien du tableau de bord dans le presse-papier + Axivion Axivion @@ -13737,6 +14039,10 @@ Souhaitez-vous ouvrir « %1 » avec l'application par défaut Open External Links Ouvrir les liens externes + + Search for issues inside the Axivion dashboard or request issue details for Axivion inline annotations to see them here. + Récupère les problèmes provenant du tableau de bord Axivion ou récupère les détails des annotations en ligne Axivion d'un problème afin de les voir ici. + Dashboard URL: URL du tableau de bord : @@ -13757,10 +14063,38 @@ Souhaitez-vous ouvrir « %1 » avec l'application par défaut User name Nom d'utilisateur + + Add... + Ajouter… + Edit... Modifier… + + Remove + Supprimer + + + Default dashboard server: + Serveur de tableau de bord par défaut : + + + unset + non défini + + + Remove Server Configuration + Supprimer la configuration du serveur + + + Remove the server configuration "%1"? + Supprimer la configuration du serveur « %1 » ? + + + Add Dashboard Configuration + Ajouter une configuration de tableau de bord + Edit Dashboard Configuration Modifier la configuration du tableau de bord @@ -15934,6 +16268,11 @@ Par exemple, « Revision : 15 » laissera la branche à la révis Display name for CMakeProjectManager::CMakeInstallStep id. Cmake Installation + + You may need to add the project directory to the list of directories that are mounted by the build device. + A revoir + Vous devez probablement ajouter le répertoire du projet à la liste des répertoires montés sur le périphérique de compilation. + The source directory %1 is not reachable by the CMake executable %2. Le répertoire source %1 n’est pas accessible par l’exécutable CMake %2. @@ -15982,6 +16321,10 @@ Par exemple, « Revision : 15 » laissera la branche à la révis Attempt to include "%1" which was already parsed. Tentative d’inclusion de %1 qui a déjà été analysé. + + CMake Preset (%1) %2 Debugger + Préréglage CMake (%1) de débogueur %2 + Unexpected source directory "%1", expected "%2". This can be correct in some situations, for example when importing a standalone Qt test, but usually this is an error. Import the build anyway? Répertoire source inattendu « %1 », attendu « %2 ». Cela peut être correct dans certaines situations, par exemple lors de l’importation d’un test Qt autonome, mais il s’agit généralement d’une erreur. Importer quand même la compilation ? @@ -16316,8 +16659,9 @@ Par exemple, « Revision : 15 » laissera la branche à la révis L’analyse CMake a été annulée. - CMake project configuration failed. No CMake configuration for build type "%1" found. - La configuration du projet CMake a échoué. Aucune configuration CMake pour le type de compilation « %1 » n’a été trouvée. + CMake project configuration failed. No CMake configuration for build type "%1" found. Check General Messages for more information. + General Messages refers to the output view + La configuration du projet CMake a échoué. Aucune configuration CMake pour le type de compilation « %1 » n'a été trouvé. Vérifiez les messages généraux pour plus d'informations. No "%1" CMake configuration found. Available configurations: "%2". @@ -16364,12 +16708,16 @@ Assurez-vous que la variable CMAKE_BUILD_TYPE contient le champ « Build ty « Version » non valide dans le fichier « %1 ». - Invalid "configurePresets" section in %1 file - Section « configurePresets » non valide dans le fichier %1 + Invalid "configurePresets" section in file "%1". + Section « configurePresets » invalide dans le fichier « %1 ». - Invalid "buildPresets" section in %1 file - Section « buildPresets » non valide dans le fichier %1 + Invalid "buildPresets" section in file "%1". + Section « buildPresets » invalide dans le fichier « %1 ». + + + Invalid "vendor" section in file "%1". + Section « vendor » invalide dans le fichier « %1 ». @@ -16709,6 +17057,10 @@ Assurez-vous que la variable CMAKE_BUILD_TYPE contient le champ « Build ty Generate Compilation Database Générer la base de données de compilation + + Generating Clang compilation database canceled. + Génération de la base de données de compilation Clang annulée. + Generate Compilation Database for "%1" Générer la base de données de compilation pour « %1 » @@ -16795,6 +17147,10 @@ Assurez-vous que la variable CMAKE_BUILD_TYPE contient le champ « Build ty Enable Anyway Activer quand même + + Cannot use clangd: Generating compilation database canceled. + Impossible d'utiliser clangd : génération de la base de données de compilation annulée. + Cannot use clangd: Failed to generate compilation database: %1 @@ -17131,6 +17487,14 @@ Sortie : Suppress This Diagnostic Supprimer ce diagnostic + + Suppress Selected Diagnostics Inline + Supprimer les diagnostiques en ligne sélectionnés + + + Suppress This Diagnostic Inline + Supprimer ce diagnostique en ligne + Disable These Checks Désactiver ces vérifications @@ -18418,20 +18782,22 @@ Le code a été copié dans votre presse-papiers. Select path to node.js executable. See %1 for installation instructions. %1 is the URL to nodejs - Sélectionner le chemin menant à l'exécutable node.js. Voir %1 pour les instructions d'installation. + Sélectionnez le chemin menant à l'exécutable node.js. Consultez les instructions d'installation à l'adresse %1. - Path to agent.js: - Chemin vers agent.js : + Path to %1: + %1 is the filename of the copilot language server + Chemin vers %1 : - Agent.js path - Chemin Agent.js + %1 path + %1 is the filename of the copilot language server + Chemin %1 - Select path to agent.js in Copilot Neovim plugin. See %1 for installation instructions. - %1 is the URL to copilot.vim getting started - Sélectionner le chemin vers agent.js dans le plug-in Copilot Neovim Voir %1 pour les instructions d'installation. + Select path to %2 in Copilot Neovim plugin. See %1 for installation instructions. + %1 is the URL to copilot.vim getting started, %2 is the filename of the copilot language server + Sélectionnez le chemin vers %2 du greffon Copilot Neovim. Consultez les instructions d'installation à l'adresse %1. Auto Request @@ -18534,13 +18900,13 @@ Le code a été copié dans votre presse-papiers. L'activation de %1 est sujette à votre accord et votre conformité dans les termes applicables %1. Il est de votre responsabilité de connaître et d'accepter les prérequis et les conditions d'utilisation d'un outil comme %1. Cela peut inclure, mais n'est pas limité à, s'assurer d'avoir les droits de permettre à %1 d'accéder à votre code, ainsi que de comprendre les implications de votre utilisation de %1 et les suggestions produites (tels que les droits d'auteur, la précision, etc.). - The Copilot plugin requires node.js and the Copilot neovim plugin. If you install the neovim plugin as described in %1, the plugin will find the agent.js file automatically. + The Copilot plugin requires node.js and the Copilot neovim plugin. If you install the neovim plugin as described in %1, the plugin will find the %3 file automatically. Otherwise you need to specify the path to the %2 file from the Copilot neovim plugin. Markdown text for the copilot instruction label - Le plug-in Copilot nécessite node.js et le plug-in Copilot Neovim. Si vous installez le plug-in Neovim tel que décrit dans %1, le plug-in trouvera automatiquement le fichier agent.js. + Le greffon Copilot nécessite node.js et le greffon Copilot Neovim. Si vous installez le greffon Neovim comme indiqué à l'adresse %1, le greffon trouvera le fichier %3 automatiquement. -Sinon, vous devez spécifier le chemin menant au fichier %2 dans le plug-in Copilot Neovim. +Sinon, vous devez spécifier le chemin vers le fichier %2 du greffon Copilot Neovim. Note @@ -18695,6 +19061,10 @@ Sinon, vous devez spécifier le chemin menant au fichier %2 dans le plug-in Copi Pin Épingler + + Reopen Last Closed Document + Ré-ouvrir le dernier document fermé + Split Scinder @@ -19152,10 +19522,6 @@ provided they were unmodified before the refactoring. Crash Reporting Rapport de plantage - - The change will take effect after restart. - La modification prendra effet après le redémarrage. - Case Sensitive (Default) Sensible à la casse (par défaut) @@ -20184,11 +20550,16 @@ provided they were unmodified before the refactoring. Readable: - Lisible : + Lisible : Writable: - Écriture possible : + Écriture possible : + + + Executable: + adjective + Exécution possible : Symbolic link: @@ -20371,6 +20742,10 @@ To do this, you type this shortcut and a space in the Locator entry field, and t Locator filters that do not update their cached data immediately, such as the custom directory filters, update it after this time interval. Les filtres de locator ne mettent pas à jour immédiatement leurs données mises en cache, tel que les filtres personnalisés de répertoire, celle-ci sont mise à jour après cet intervalle de temps. + + Locator filters show relative paths to the active project when possible. + Les filtres du localisateur affichent les chemins relatifs du projet actifs lorsque possible. + Files in Directories Fichiers dans les répertoires @@ -20593,10 +20968,6 @@ To do this, you type this shortcut and a space in the Locator entry field, and t Description: Description : - - Executable: - Exécutable : - Arguments: Arguments : @@ -20690,6 +21061,11 @@ To do this, you type this shortcut and a space in the Locator entry field, and t Change... Modifier… + + Executable: + noun + Exécutable : + Base environment: Environnement de base : @@ -21026,14 +21402,6 @@ Voulez-vous les écraser ? %2 - - Launching Windows Explorer Failed - Échec du lancement de l’explorateur Windows - - - Could not find explorer.exe in path to launch Windows Explorer. - explorer.exe introuvable dans le chemin pour lancer Windows Explorer. - The command for file browser is not set. La commande pour le navigateur de fichiers n’est pas définie. @@ -21570,10 +21938,18 @@ Souhaitez-vous les importer maintenant ? The platform executable suffix. Suffixe de l’exécutable de la plate-forme. + + The path to the running %1 itself. + Le chemin menant au programme %1. + The directory where %1 finds its pre-installed resources. Répertoire dans lequel %1 trouve ses ressources préinstallées. + + The directory where %1 puts custom user data. + Le répertoire où %1 écrit les données spécifiques à l'utilisateur. + The current date (QDate formatstring). La date actuelle (chaîne de formatage QDate). @@ -21843,6 +22219,15 @@ Double-cliquez pour modifier l’élément. Activate %1 View Activer la vue %1 + + output.txt + default file name suggested for saving text from output views + sortie.txt + + + Save Contents... + Enregistrer le contenu… + Elided %n characters due to Application Output settings @@ -22103,6 +22488,14 @@ Double-cliquez pour modifier l’élément. Interpret ambiguous headers as C headers Interpréter les en-têtes ambigus comme des en-têtes C + + Enable indexing + Activer l'indexation + + + Indexing should almost always be kept enabled, as disabling it will severely limit the capabilities of the code model. + L'indexation doit presque toujours rester active : sa désactivation limitera sévèrement les capacités du modèle de code. + Do not index files greater than Ne pas indexer les fichiers plus grands que @@ -22147,6 +22540,14 @@ Double-cliquez pour modifier l’élément. <p>If background indexing is enabled, global symbol searches will yield more accurate results, at the cost of additional CPU load when the project is first opened. The indexing result is persisted in the project's build directory. If you disable background indexing, a faster, but less accurate, built-in indexer is used instead. The thread priority for building the background index can be adjusted since clangd 15.</p><p>Background Priority: Minimum priority, runs on idle CPUs. May leave 'performance' cores unused.</p><p>Normal Priority: Reduced priority compared to interactive work.</p><p>Low Priority: Same priority as other clangd work.</p> <p>Si l’indexation en arrière-plan est activée, les recherches globales de symboles donneront des résultats plus précis, au prix d’une charge de travail supplémentaire du CPU lors de la première ouverture du projet. Le résultat de l’indexation est conservé dans le répertoire de construction du projet. Si vous désactivez l’indexation en arrière-plan, un indexeur intégré plus rapide, mais moins précis, est utilisé à la place. La priorité des threads pour la construction de l’index d’arrière-plan peut être ajustée depuis clangd 15.</p><p>Priorité d’arrière-plan : priorité minimale, s’exécute sur les processeurs inactifs. Peut laisser les cœurs de « performance » inutilisés.</p><p>Priorité normale : priorité réduite par rapport au travail interactif.</p><p>Priorité basse : même priorité que les autres travaux de clangd.</p> + + The location of the per-project clangd index.<p>This is also where the compile_commands.json file will go. + L'emplacement de l'index clangd par projet. <p>C'est aussi l'emplacement qu'aura le fichier compile_commands.json. + + + The location of the per-session clangd index.<p>This is also where the compile_commands.json file will go. + L'emplacement de l'index clangd par session. <p>C'est aussi l'emplacement qu'aura le fichier compile_commands.json. + <p>The C/C++ backend to use for switching between header and source files.</p><p>While the clangd implementation has more capabilities than the built-in code model, it tends to find false positives.</p><p>When "Try Both" is selected, clangd is used only if the built-in variant does not find anything.</p> <p>Le back-end C/C++ à utiliser pour alterner entre les en-têtes et les fichiers source.</p><p>Bien que l'implémentation clangd possède plus de fonctionnalités que le modèle de code intégré, clangd produit des faux positifs.</p><p>Lorsque « Essayer les deux » est sélectionné, clangd n'est utilisé que lorsque le modèle de code intégré ne trouve rien.</p> @@ -22163,6 +22564,10 @@ Double-cliquez pour modifier l’élément. Controls whether clangd may insert header files as part of symbol completion. Contrôle si clangd peut insérer des fichiers d’en-tête dans le cadre de la complétion de symboles. + + <p>Controls whether when editing a header file, clangd should re-parse all source files including that header.</p><p>Note that enabling this option can cause considerable CPU load when editing widely included headers.</p><p>If this option is disabled, the dependent source files are only re-parsed when the header file is saved.</p> + <p>Détermine si la modification d'un fichier d'en-tête déclenche l'analyse par clangd, des fichiers sources incluant ce fichier d'en-tête.</p><p>Notez que l'activation de cette option augmente considérablement la charge CPU lors de la modification d'un fichier d'en-tête fréquemment inclût.</p><p>Si cette option est désactivée, les fichiers sources dépendants ne seront ré-analysés que lors de l'enregistrement du fichier d'en-tête.</p> + Defines the amount of time %1 waits before sending document changes to the server. If the document changes again while waiting, this timeout resets. @@ -22187,6 +22592,10 @@ Le modèle de code intégré gèrera le surlignage, la complétion, etc.Insert header files on completion Insérer les fichiers d’en-tête dans la complétion + + Update dependent sources + Mise à jour des fichiers sources dépendants + Automatic Automatique @@ -22211,6 +22620,14 @@ Le modèle de code intégré gèrera le surlignage, la complétion, etc.Background indexing: Indexation en arrière-plan : + + Per-project index location: + Emplacement de l'index de projet : + + + Per-session index location: + Emplacement de l'index de session : + Header/source switch mode: Mode de basculement entête/source : @@ -22743,10 +23160,6 @@ Utilisez le glisser-déposer pour modifier l’ordre des paramètres.Evaluating type hierarchy... Évaluation de la hiérarchie de type… - - Type Hierarchy - Hiérarchie de type - C++ Symbols Symboles C++ @@ -23057,6 +23470,14 @@ dans le corps de la classe Déclarations dans la définition de « namespace » + + Macros that can be used as statements without a trailing semicolon. + Macros pouvant être utilisées comme expression sans être suivies de point-virgule. + + + Statement Macros + Macros instructions + Braces Accolades @@ -23281,6 +23702,22 @@ Les chemins peuvent être donnés en absolus ou en relatifs au dossier contenant Ces chemins sont utilisés en complément au répertoire actuel pour basculer entre les fichiers d’en-tête et de source. + + Header File Variables + Variables de fichier d'en-tête + + + Header file + Fichier d'en-tête + + + Use "#pragma once" instead + Utiliser « #pragma once » à la place + + + Include guard template: + Inclure les modèles de garde-fous : + S&uffix: S&uffixe : @@ -23317,10 +23754,6 @@ Ces chemins sont utilisés en complément au répertoire actuel pour basculer en **************************************************************************/ - - Use "#pragma once" instead of "#ifndef" guards - Utiliser « #pragma-once » au lieu du garde-fou « #ifndef » - &Lower case file names &Noms des fichiers en minuscule @@ -23353,10 +23786,6 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer &Prefixes: &Préfixes : - - Include guards - Garde-fous - Sources Sources @@ -23507,14 +23936,6 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer Open Type Hierarchy Ouvrir la hiérarchie de type - - Meta+Shift+T - Meta+Maj+T - - - Ctrl+Shift+T - Ctrl+Maj+T - Open Include Hierarchy Ouvrir la hiérarchie d’includes @@ -23902,6 +24323,44 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer collecting overrides... réception des surcharges… + + Convert Function Call to Qt Meta-Method Invocation + Convertir les appels de fonction en invocation de méthode Qt Meta + + + Move Class to a Dedicated Set of Source Files + Déplacer la classe vers un ensemble de fichiers sources dédiés + + + Header file only + Fichier d'en-tête seul + + + Project: + Projet : + + + Header file: + Fichier d'en-tête : + + + Implementation file: + Fichier d'implémentation : + + + Refusing to overwrite the following files: %1 + + Impossible d'écraser les fichiers suivants : %1 + + + + Failed to add to project file "%1": %2 + Impossible d'ajouter le fichier « %1 » au projet : %2 + + + Re-order Member Function Definitions According to Declaration Order + Ré-ordonner les définitions de fonction membres suivant l'ordre de déclaration + QtC::Cppcheck @@ -24201,6 +24660,10 @@ Souhaitez-vous tout de même les afficher ? Always adds a breakpoint on the <i>%1()</i> function. Ajoute toujours un point d’arrêt sur la fonction <i>%1()</i>. + + Behavior + Comportement + Default array size: Taille de tableau par défaut : @@ -24382,6 +24845,14 @@ Pour plus de détails, voir /etc/sysctl.d/10-ptrace.conf Edit Selected Breakpoints... Modifier les points d’arrêt sélectionnés… + + Disable All Breakpoints + Désactiver tous les points d'arrêt + + + Enable All Breakpoints + Activer tous les points d'arrêt + Disable Selected Locations Désactiver les emplacements sélectionnés @@ -25507,6 +25978,19 @@ par défaut de l’utilisateur au démarrage du débogueur. Use common locations for debug information Utiliser les emplacements actuels pour les informations de débogage + + Use debug info daemon + ou daemon ou service + Utiliser le démon fournissant les informations de débogage + + + Use system settings + Utiliser les paramètres du système + + + Lets GDB attempt to automatically retrieve debug information for system packages. + Laisse GDB essayer de récupérer automatiquement les informations de débogage pour les paquets systèmes. + Enable reverse debugging Activer le débogage inversé @@ -25899,6 +26383,10 @@ par défaut de l’utilisateur au démarrage du débogueur. DAP I/O Error Erreur d'E/S DAP + + "%1" could not be started. Error message: %2 + « %1 »n'a pas pu être démarré. Message d'erreur : %2 + The Pdb process failed to start. Either the invoked program "%1" is missing, or you may have insufficient permissions to invoke the program. Échec du démarrage du processus Pdb. Soit le programme « %1 » est manquant, soit les droits sont insuffisants pour exécuter le programme. @@ -26533,6 +27021,10 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si Launching Debugger Lancement du débogueur + + Launching %1 Debugger + Lancement du débogueur %1 + Switches the debugger to instruction-wise operation mode. In this mode, stepping operates on single instructions and the source location view also shows the disassembled instructions. Bascule le débogueur en mode de fonctionnement par instructions. Dans ce mode, le débogage opère sur des instructions individuelles et la vue de l’emplacement de la source montre également les instructions désassemblées. @@ -26802,6 +27294,10 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si GDB Preset Préréglage GDB + + LLDB Preset + Préréglage LLDB + Python Preset Préréglage Python @@ -27231,14 +27727,17 @@ Voulez-vous réessayer ? Enable %1 debugger. + %1 is C++, QML, or Python Activer le débogueur %1. Disable %1 debugger. + %1 is C++, QML, or Python Désactiver le débogueur %1. Try to determine need for %1 debugger. + %1 is C++, QML, or Python Essayer de déterminer si le débogueur %1 est nécessaire. @@ -28102,6 +28601,7 @@ L’accès au module ou la mise en place de points d’arrêt par fichier et par %1 of length %2 + <type> of length <number>, e.g. for strings and byte arrays %1 d'une longueur %2 @@ -29606,57 +30106,44 @@ La recompilation du projet peut aider. Extensions Extensions - - Get started - Démarrer - - - Install the extension from above. Installation starts automatically. You can always uninstall the extension afterwards. - Installer l'extension depuis l'emplacement ci-dessus. L'installation démarre automatiquement. Vous pourrez toujours désinstaller l'extension plus tard. - More information Plus d'informations - - Online Documentation - Documentation en ligne - - - Tutorials - Tutoriels - - - Examples - Exemples - - - Extension library details - Détails de la bibliothèque d'extensions - - - Size - Taille - - - Version - Version - - - Location - Emplacement - Extension details Détails de l'extension - - Released - Publiée + + Pack contains %n plugins. + + Le paquet contient %n greffon. + Le paquet contient %n greffons. + - Related tags - Étiquettes connexes + Load on start + Charger au démarrage + + + Restart Now + Redémarrer maintenant + + + Error + Erreur + + + Loaded + Chargé + + + Not loaded + Non chargé + + + Tags + Étiquettes Platforms @@ -29670,14 +30157,50 @@ La recompilation du projet peut aider. Extensions in pack Extensions dans le paquet + + Downloading... + Téléchargement… + + + Cancel + Annuler + + + Download Extension + Télécharger l'extension + + + Download Error + Erreur de téléchargement + + + Cannot download extension + Impossible de télécharger l'extension + + + Code: %1. + Code : %1. + Manage Extensions Gérer les extensions + + Search + Rechercher + Install... Installer… + + Use external repository + Utiliser un dépôt externe + + + Repository: %1 + Dépôt : %1 + QtC::ExtensionSystem @@ -29714,6 +30237,10 @@ La recompilation du projet peut aider. Dependencies: Dépendances : + + Loadable without restart: + Pouvant être chargé sans redémarrage + %1 (current: "%2") %1 (actuel : « %2 ») @@ -29823,7 +30350,7 @@ Le greffon est désactivé par un argument de ligne de commande. Plugin is required. - Le plugin est nécessaire. + Le greffon est nécessaire. Load on startup @@ -30005,6 +30532,10 @@ Raison : %3 Could not resolve dependency '%1(%2)' Impossible de résoudre la dépendance « %1(%2) » + + Cannot open file + Impossible d'ouvrir le fichier + "%1" is missing « %1 » est manquant @@ -30029,6 +30560,14 @@ Raison : %3 Value "%2" for key "%1" has invalid format La valeur « %2 » pour la clé « %1 » a un format invalide + + No IID found + IID non trouvé + + + Expected IID "%1", but found "%2" + IID « %1 » attendu, mais non trouvé « %2 » + Plugin meta data not found Les métadonnées du greffon n’ont pas été trouvées @@ -34596,44 +35135,8 @@ Souhaitez-vous les écraser ? Demander pour les périphériques qui ne sont pas en mode développeur - Rename - Renommer - - - Rename a simulator device. - Renommer un simulateur. - - - Delete - Supprimer - - - Delete simulator devices. - Supprimer un simulateur. - - - Reset contents and settings of simulator devices. - Réinitialise le contenu et les paramètres des simulateurs. - - - Create - Créer - - - Create a new simulator device. - Créer un nouveau simulateur. - - - Start - Démarrer - - - Start simulator devices. - Démarrer un simulateur. - - - Screenshot - Capture d’écran + Configure available simulator devices in <a href="%1">Xcode</a>. + Configurer les simulateurs de périphériques disponibles dans <a href="%1">Xcode</a>. Devices @@ -34643,116 +35146,6 @@ Souhaitez-vous les écraser ? Simulator Simulateur - - Screenshot directory: - Répertoire des captures d'écran : - - - You are trying to launch %n simulators simultaneously. This will take significant system resources. Do you really want to continue? - - Vous essayez de démarrer %n simulateur à la fois. Cela va prendre une part significative des ressources systèmes. Souhaitez-vous vraiment continuer ? - Vous essayez de démarrer %n simulateurs à la fois. Cela va prendre une part significative des ressources systèmes. Souhaitez-vous vraiment continuer ? - - - - Simulator Start - Démarrage du simulateur - - - Starting %n simulator device(s)... - - Démarrage de %n simulateur… - Démarrage de %n simulateurs… - - - - Cannot start simulator (%1, %2) in current state: %3. - Impossible de démarrer le simulateur (%1, %2) dans l'état actuel : %3. - - - simulator start - Démarrage du simulateur - - - Creating simulator device... - Création du simulateur… - - - Simulator device (%1) created. -UDID: %2 - Simulateur (%1) créé. -UDID : %2 - - - Simulator device (%1) creation failed. -Error: %2 - Échec lors de la création du simulateur (%1). -Erreur : %2 - - - Do you really want to reset the contents and settings of the %n selected device(s)? - - Souhaitez-vous vraiment réinitialiser le contenu et les paramètres d'%n périphérique sélectionné ? - Souhaitez-vous vraiment réinitialiser le contenu et les paramètres des %n périphériques sélectionnés ? - - - - Resetting contents and settings... - Réinitialisation du contenu et des paramètres… - - - simulator reset - Réinitialisation du simulateur - - - Rename %1 - Renommer %1 - - - Enter new name: - Entrer un nouveau nom : - - - Renaming simulator device... - Renommage du simulateur… - - - simulator rename - Renommage du simulateur - - - Delete Device - Supprimer un périphérique - - - Do you really want to delete the %n selected device(s)? - - Souhaitez-vous vraiment supprimer %n périphérique sélectionné ? - Souhaitez-vous vraiment supprimer les %n périphériques sélectionnés ? - - - - Deleting %n simulator device(s)... - - Suppression de %n simulateur… - Suppression de %n simulateurs… - - - - simulator delete - Suppression de simulateur - - - Capturing screenshots from %n device(s)... - - Capture d'écran à partir de %n périphérique… - Capture d'écran à partir de %n périphériques… - - - - simulator screenshot - Capture d'écran de simulateur - iOS build iOS BuildStep display name. @@ -34843,6 +35236,10 @@ Erreur : %2 OS version Version du système + + Product type + Type de produit + An iOS device in user mode has been detected. Un périphérique iOS en mode utilisateur a été détecté. @@ -34859,6 +35256,10 @@ Erreur : %2 Identifier: Identifiant : + + Product type: + Type de produit : + OS Version: Version du système : @@ -34920,6 +35321,10 @@ Erreur : %2 Debugging and profiling is currently not supported for devices with iOS 17 and later. Le débogage et le profilage n'est actuellement pas pris en charge avec les périphériques iOS 17 et supérieur. + + Update + Mettre à jour + Starting remote process. Démarrage des processus distants. @@ -34993,22 +35398,10 @@ Erreur : %2 iOS Simulator Simulateur iOS - - Create Simulator - Créer un simulateur - - - Simulator name: - Nom du simulateur : - Device type: Type de périphérique : - - OS version: - Version de l’OS : - None Aucun @@ -35137,50 +35530,6 @@ Date d'expiration : %3 Invalid simulator response. Device Id mismatch. Device Id = %1 Response Id = %2 Réponse du simulateur invalide. L'identifiant du périphérique ne correspond pas. Identifiant du périphérique = %1 Identifiant de réponse = %2 - - UDID: %1 - UDID : %1 - - - Simulator Name - Nom du simulateur - - - Runtime - Runtime - - - Current State - État actuel - - - Simulator Operation Status - Status des opérations du simulateur - - - %1, %2 -Operation %3 completed successfully. - %1, %2 -Opération %3 terminée avec succès. - - - %1, %2 -Operation %3 failed. -UDID: %4 -Error: %5 - %1, %2 -Opération %3 échouée. -UDID : %4 -Erreur : %5 - - - Unknown - Inconnue - - - Done. - Fait. - Failed to start process. Échec du démarrage du processus. @@ -35264,6 +35613,10 @@ Erreur : %5 Error %1 Erreur %1 + + Deprecated + Obsolète + Incoming Entrant @@ -35272,6 +35625,14 @@ Erreur : %5 Outgoing Sortant + + Bases + Bases + + + Derived + Dérivé + Call Hierarchy Hiérarchie d’appels @@ -35414,6 +35775,14 @@ Erreur : %5 Inspect Language Clients... Inspecter les fournisseurs de langages… + + Language Server Diagnostics + Diagnostiques du serveur de langage + + + Issues provided by the Language Server in the current document. + Problèmes fournis par le serveur de langage pour le document courant. + &Add &Ajouter @@ -35476,6 +35845,10 @@ Exemple : *.cpp%1*.h Language server-specific JSON to pass via "initializationOptions" field of "initialize" request. JSON spécifique au serveur à transmettre via le champ « initializationOptions » de la requête « initialize ». + + File pattern: + Motif de fichier : + Select MIME Types Sélectionner les types MIME @@ -35703,6 +36076,142 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Supprimer %1 + + QtC::Lua + + Network Access + Accès au réseau + + + Allow Internet Access + Permettre l'accès au réseau + + + Allow the extension "%1" to fetch from the following URL: +%2 + de l'URL ? + Permet à l'extension « %1 » de récupérer le contenu à l'URL : +%2 + + + Remember choice + Se rappeler du choix + + + Allow the extension "%1" to fetch data from the internet? + Permettre à l'extension « %1 » de récupérer des données depuis Internet ? + + + Allow the extension "%1" to fetch datafrom the following URL: + + + Permettre à l'extension « %1 » de récupérer des données depuis l'URL suivante : + + + + + Always Allow + Toujours permettre + + + Allow Once + Permettre une seule fois + + + Deny + Refuser + + + Fetching is not allowed for the extension "%1". (You can edit permissions in Preferences > Lua.) + ajouter "en ligne" ? + La récupération de données n'est pas autorisée pour l'extension « %1 ». (Vous pouvez éditer les permissions dans Préférences > Lua.) + + + Package info is not an object. + L'information du paquet n'est pas un objet. + + + Installed package info is not an object. + L'information du paquet installé n'est pas un objet. + + + Cannot create app data directory. + Impossible de créer le répertoire pour les données de l'application. + + + Cannot write to package info: %1 + Impossible d'écrire l'information du paquet : %1 + + + Cannot write to temporary file. + Impossible d'écrire le fichier temporaire. + + + Unarchiving failed. + Échec du désarchivage. + + + Cannot open temporary file. + Impossible d'ouvrir le fichier temporaire. + + + Installing package(s) %1 + Installation des paquet(s) %1 + + + Install Package + Installer le paquet + + + The extension "%1" wants to install the following package(s): + + + L'extension « %1 » souhaite installer le(s) paquet(s) suivant(s) : + + + + + Install + Installer + + + * %1 - %2 (from: [%3](%3)) + Markdown list item: %1 = package name, %2 = version, %3 = URL + * %1 - %2 (depuis : [%3](%3)) + + + Failed to run script %1: %2 + Impossible d'exécuter le script %1 : %2 + + + No hook with the name "%1" found. + Aucun crochet avec le nom « %1 » n'a été trouvé. + + + Script did not return a table. + Le script n'a pas retourné de tableau. + + + Extension info table did not contain a setup function. + Le tableau d'informations de l'extension ne contient pas de fonction d'installation. + + + Cannot prepare extension setup: %1 + Impossible de préparer l'installation de l'extension : %1 + + + Extension setup function returned false. + La fonction d'installation de l'extension a renvoyé faux. + + + Extension setup function returned error: %1 + La fonction d'installation de l'extension a renvoyé l'erreur %1 + + + Failed to load plugin %1: %2 + Échec de chargement du greffon %1 : %2 + + QtC::Macros @@ -36140,6 +36649,10 @@ Voir la documentation spécifique au serveur de langage pour la liste des param No CMake tool was detected. Add a CMake tool in the <a href="cmake">CMake options</a> and select Apply. Aucun outil CMake détecté. Ajoutez un outil CMake dans les <a href="cmake">options CMake</a> et cliquez sur Appliquer. + + Cannot apply changes in Devices > MCU. + Impossible d'appliquer les changements dans Périphériques > MCU. + Qt for MCUs Kit Creation Création de kit Qt pour MCUs @@ -36176,10 +36689,6 @@ Voir la documentation spécifique au serveur de langage pour la liste des param Status État - - Unable to apply changes in Devices > MCU. - Impossible d'appliquer les changements dans Périphériques > MCU. - No target selected. Aucune cible sélectionnée. @@ -36881,6 +37390,15 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Add Canvas Diagram Ajouter un diagramme de canevas + + Toggle View and Filter Settings + View and Filter Settings ? + Active/désactive les paramètres de la vue et des filtres + + + Ctrl+Shift+L + Ctrl+Maj+L + Synchronize Browser and Diagram Synchroniser le navigateur et le diagramme @@ -36905,6 +37423,18 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Return Entrée + + Opening File + Ouverture du fichier + + + File "%1" does not exist. + Le fichier « %1 » n'existe pas. + + + Add Related Elements... + Ajouter des éléments liés… + Update Include Dependencies Mise à jour des dépendances d’inclusion @@ -36917,10 +37447,34 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Config path: Chemin de la configuration : + + Select File Target + Sélectionner le fichier cible + + + Linked file: + Fichier lié : + + + Select Image File + Sélectionner le fichier image + + + Image: + Image : + <font color=red>Model file must be reloaded.</font> <font color=red>Le fichier de modèle doit être rechargé.</font> + + Selecting Image + Sélection de l'image + + + Unable to read image file "%1". + Impossible de lire le fichier image « %1 ». + No model loaded. Cannot save. Aucun modèle chargé. Impossible d'enregistrer. @@ -37041,6 +37595,18 @@ Utile si le répertoire de compilation est corrompu ou lors d’une recompilatio Add Class %1 Ajouter la classe %1 + + Add Package Link to %1 + Ajouter un lien de paquet vers %1 + + + Add Diagram Link to %1 + Ajouter un lien de diagramme vers %1 + + + Add Document Link to %1 + Ajouter un lien de document vers %1 + Add Package %1 Ajouter le paquet %1 @@ -38609,6 +39175,11 @@ Title of a the cloned RunConfiguration window, text of the window Do you really want to delete build configuration <b>%1</b>? Voulez-vous vraiment supprimer la configuration de compilation <b>%1</b> ? + + compile-output.txt + file name suggested for saving compile output + sortie-compilation.txt + Show Compile &Output Afficher la &sortie de compilation @@ -39073,6 +39644,10 @@ Title of a the cloned RunConfiguration window, text of the window Cancel Build Annuler la compilation + + Open Workspace... + Ouvrir l'espace de travail… + Add New... Ajouter un nouveau… @@ -39102,6 +39677,10 @@ Title of a the cloned RunConfiguration window, text of the window Load Project Charger un projet + + Open Workspace + Ouvrir l'espace de travail + New Project Title of dialog @@ -39366,10 +39945,6 @@ Souhaitez-vous les ignorer ? <h3>Project already open</h3> <h3>Le projet est déjà ouvert</h3> - - Failed opening project "%1": Project is not a file. - Échec de l’ouverture du projet « %1 » : le projet n’est pas un fichier. - Failed opening project "%1": No plugin can open project type "%2". Échec de l’ouverture du projet « %1 » : aucun greffon ne peut ouvrir le type de projet « %2 ». @@ -39738,6 +40313,16 @@ Renommer quand même %2 en %3 ? Current directory Répertoire actuel + + s + Suffix for "seconds" + s + + + The amount of seconds to wait between a "soft kill" and a "hard kill" of a running application. + mort douce ? + Le nombre de secondes à attendre entre une « mort douce » et une « mort brutale » de l'application en cours d'exécution. + Directory Répertoire @@ -39818,6 +40403,14 @@ Renommer quand même %2 en %3 ? Deduced from Project Déduit du projet + + Show all kits in "Build & Run" in "Projects" mode + Afficher tous les kits dans « Compiler et exécuter » dans le mode « Projets » + + + Show also inactive kits in "Build & Run" in "Projects" mode. + Afficher aussi les kits inactifs dans « Compiler et exécuter » dans le mode « Projets ». + Environment changes to apply to run configurations, but not build configurations. Changements de l'environnement à appliquer aux configurations d'exécution, mais pas aux configurations de compilation. @@ -39842,6 +40435,10 @@ Renommer quand même %2 en %3 ? Default for "Run in terminal": Valeur par défaut pour « Exécuter dans un terminal » : + + Time to wait before force-stopping applications: + Temps d'attente avant de forcer l'arrêt des applications : + Always deploy project before running it Toujours déployer le projet avant de l’exécuter @@ -39866,6 +40463,10 @@ Renommer quand même %2 en %3 ? Default build directory: Répertoire par défaut de compilation : + + Template used to construct the default build directory.<br><br>The default value can be set using the environment variable <tt>%1</tt>. + Modèle utilisé pour construire le chemin de compilation par défaut.<br><br>La valeur par défaut peut être définie au travers de la variable d'environnement <tt>%1</tt>. + QML debugging: Débogage QML : @@ -40179,10 +40780,6 @@ Display name of the clean build step list. Used as part of the labels in the pro Qt Plugin Greffon Qt - - %{JS: value('Type') === 'qtplugin' ? value('BaseClassName').slice(1) : (value('ProjectName').charAt(0).toUpperCase() + value('ProjectName').slice(1))} - %{JS: value('Type') === 'qtplugin' ? value('NomClasseParent').slice(1) : (value('NomDuProjet').charAt(0).toUpperCase() + value('NomDuProjet').slice(1))} - Class name: Nom de la classe : @@ -40235,18 +40832,10 @@ Display name of the clean build step list. Used as part of the labels in the pro Qt module: Module Qt : - - %{JS: Cpp.classToFileName(value('Class'), Util.preferredSuffix('text/x-c++hdr'))} - %{JS: Cpp.classToFileName(value('Classe'), Util.preferredSuffix('text/x-c++hdr'))} - Header file: Fichier d’en-tête : - - %{JS: Cpp.classToFileName(value('Class'), Util.preferredSuffix('text/x-c++src'))} - %{JS: Cpp.classToFileName(value('Classe'), Util.preferredSuffix('text/x-c++src'))} - Source file: Fichier source : @@ -40339,16 +40928,6 @@ You should not mix multiple test frameworks in a project. Vous ne devez pas mélanger plusieurs cadriciels de tests dans un même projet. - - %{JS: 'tst_' + value('TestCaseName').toLowerCase() + '.' + Cpp.cxxSourceSuffix()} - Should not be translated, JS code. The file where it comes is autogenerated, so possibly a text field that should not be taken into account - %{JS: 'tst_' + value('TestCaseName').toLowerCase() + '.' + Cpp.cxxSourceSuffix()} - - - %{JS: 'tst_' + value('TestCaseName').toLowerCase() + '.qml'} - Should not be translated, JS code. The file where it comes is autogenerated, so possibly a text field that should not be taken into account - %{JS: 'tst_' + value('TestCaseName').toLowerCase() + '.qml'} - Test Information Information de test @@ -40525,10 +41104,6 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Branch: Branche : - - %{defaultDir} - %{repertoireParDefaut} - Directory: Répertoire : @@ -40557,6 +41132,26 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Checkout Checkout + + Creates a translation file that you can add to a Qt project. + Crée un fichier de traduction que vous pouvez ajouter au projet Qt. + + + Qt Translation File + Fichier de traduction Qt + + + 2.x + 2.x + + + 3.x + 3.x + + + Catch2 version: + Version de Catch2 : + Clones a Git repository and tries to load the contained project. Clone un dépôt Git et essaye de charger le projet contenu. @@ -40701,18 +41296,10 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio This wizard generates a Qt Widgets Application project. The application derives by default from QApplication and includes an empty widget. Cet assistant génère un projet d’application Qt avec widgets. L’application dérive par défaut de QApplication et inclut un widget vide. - - %{JS: value('BaseClass') ? value('BaseClass').slice(1) : 'MyClass'} - %{JS: value('ClasseParent') ? value('ClasseParent').slice(1) : 'MaClasse'} - Generate form Générer le formulaire - - %{JS: Cpp.classToFileName(value('Class'), 'ui')} - %{JS: Cpp.classToFileName(value('Classe'), 'ui')} - Form file: Fichier d’interface : @@ -40741,18 +41328,6 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Plain C Application Application C simple - - %{JS: value('BaseCB') ? value('BaseCB').slice(1) : 'MyClass'} - %{JS: value('BaseCB') ? value('BaseCB').slice(1) : 'MaClasse'} - - - %{JS: Cpp.classToFileName(value('Class'), Util.preferredSuffix('text/x-python'))} - %{JS: Cpp.classToFileName(value('Classe'), Util.preferredSuffix('text/x-python'))} - - - %{JS: Util.fileName('%{ProjectName}', 'pyproject')} - %{JS: Util.fileName('%{NomDuProjet}', 'projetpy')} - Project file: Fichier du projet : @@ -40825,14 +41400,6 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Qt Console Application Application Qt en console - - This wizard creates a simple unit test project. - Cet assistant génère un projet de test unitaire simple. - - - Qt Test - Qt Test - Google Test Google Test @@ -40877,6 +41444,10 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Generate initialization and cleanup code Génère le code d’initialisation et de nettoyage + + Creates a project that you can open in Qt Design Studio + Crée un projet que vous pouvez ouvrir dans Qt Design Studio + Creates a project with a structure that is compatible both with Qt Design Studio (via .qmlproject) and with Qt Creator (via CMakeLists.txt). It contains a .ui.qml form that you can visually edit in Qt Design Studio. Génère un projet avec une structure compatible avec Qt Design Studio (via .qmlproject) et avec Qt Creator (via CMakeLists.txt). Le projet contient un formulaire .ui.qml qui peut être éditer visuellement dans Qt Design Studio. @@ -40889,6 +41460,10 @@ Pour développer une application complête, créer un projet Qt Quick Applicatio Qt 6.5 Qt 6.5 + + The minimum version of Qt you want to build the application for + La version minimale de Qt avec laquelle vous pouvez compiler l'application + Creates a Qt Quick application that can have both QML and C++ code. You can build the application and deploy it to desktop, embedded, and mobile target platforms. @@ -40917,6 +41492,62 @@ Preselects a desktop Qt for building the application if available. Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si disponible. + + This wizard creates a simple unit test project using Qt Test. + Cet assistant crée un projet simple de tests unitaires utilisant Qt Test. + + + Creates a new unit test project using Qt Test. Unit tests allow you to verify that the code is fit for use and that there are no regressions. + Crée un nouveau projet de tests unitaires utilisant Qt Test. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. + + + Test Project + Projet de tests + + + Qt Test Project + Projet de tests Qt + + + This wizard creates a simple unit test project using Qt Quick Test. + Cet assistant crée un projet simple de tests unitaires utilisant Qt Quick Test. + + + Creates a new unit test project using Qt Quick Test. Unit tests allow you to verify that the code is fit for use and that there are no regressions. + Crée un nouveau projet de tests unitaires utilisant Qt Quick Test. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. + + + Qt Quick Test Project + Projet de tests Qt Quick + + + This wizard creates a simple unit test project using Google Test. + Cet assistant crée un projet simple de tests unitaires utilisant Google Test. + + + Google Test (header only) + Google Test (fichiers d'en-tête seuls) + + + Google Test (shared libraries) + Google Test (bibliothèques partagées) + + + Googletest install directory (optional): + Répertoire d'installation de Google Test (optionnel) : + + + Creates a new unit test project using Google Test. Unit tests allow you to verify that the code is fit for use and that there are no regressions. + Crée un nouveau projet de tests unitaires utilisant Google Test. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. + + + Google Test Project + Projet de tests Google + + + This wizard creates a simple unit test project using Boost. + Cet assistant crée un projet simple de tests unitaires utilisant Boost. + Boost Test (header only) Test Boost (entête seulement) @@ -40925,10 +41556,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Boost Test (shared libraries) Test Boost (bibliothèques partagées) - - Enable C++11 - Activer le C++11 - Googletest source directory (optional): Répertoire source de Googletest (optionnel) : @@ -40953,14 +41580,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Project and Test Information Projet et information des tests - - Creates a new unit test project. Unit tests allow you to verify that the code is fit for use and that there are no regressions. - Génère un nouveau projet de test unitaire. Les tests unitaires permettent de vérifier que le code est utilisable et qu’il n’y a pas de régression. - - - Auto Test Project - Tester automatiquement le projet - Qt for Python module: Module de Qt pour Python : @@ -40969,10 +41588,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d You can choose Qt classes only if you select a Qt for Python module. Vous ne pouvez choisir des classes Qt que si vous sélectionnez un module Qt pour Python. - - %{BaseCB} - %{BaseCB} - Import QtCore Importer QtCore @@ -40985,10 +41600,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Import QtQuick Importer QtQuick - - %{JS: Util.fileName(value('Class'), Util.preferredSuffix('text/x-python'))} - %{JS: Util.fileName(value('Classe'), Util.preferredSuffix('text/x-python'))} - Creates new Python class file. Génère un nouveau fichier de classe Python. @@ -40997,6 +41608,42 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Python Python + + Creates a new unit test project using Boost. Unit tests allow you to verify that the code is fit for use and that there are no regressions. + Crée un nouveau projet de tests unitaires utilisant Boost. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. + + + Boost Test Project + Projet de tests Boost + + + This wizard creates a simple unit test project using Catch2. + Cet assistant crée un projet simple de tests unitaires utilisant Catch2. + + + Catch2 v2 (header only) + Catch2 v2 (fichiers d'en-tête seuls) + + + Catch2 v3 (shared libraries) + Catch2 v3 (bibliothèques partagées) + + + Catch2 install directory (optional): + Répertoire d'installation de Catch2 (optionnel) : + + + Use own main + Utiliser votre propre fonction main + + + Creates a new unit test project using Catch2. Unit tests allow you to verify that the code is fit for use and that there are no regressions. + Crée un nouveau projet de tests unitaires utilisant Catch2. Les tests unitaires vous permettent de vérifier si le code est prêt à être utilisé et s'il n'y a pas de régression. + + + Catch2 Test Project + Projet de tests Catch2 + Python Class Classe Python @@ -41033,24 +41680,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Qt Qt - - Creates a project that you can open in Qt Design Studio. - Crée un projet qui peut être ouvert dans Qt Design Studio. - - - The minimum version of Qt you want to build the application for. - La version minimale de Qt pour laquelle vous voulez compiler votre application. - - - %{JS: Cpp.classToFileName(value('Class'), Cpp.cxxHeaderSuffix())} - Should not be translated, JS code. The file where it comes is autogenerated, so possibly a text field that should not be taken into account - %{JS: Cpp.classToFileName(value('Class'), Cpp.cxxHeaderSuffix())} - - - %{JS: Cpp.classToFileName(value('Class'), Cpp.cxxSourceSuffix())} - Should not be translated, JS code. The file where it comes is autogenerated, so possibly a text field that should not be taken into account - %{JS: Cpp.classToFileName(value('Class'), Cpp.cxxSourceSuffix())} - Qt Item Model Modèle d’élément Qt @@ -41071,14 +41700,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Include QMainWindow Inclure QMainWindow - - Include QDeclarativeItem - Qt Quick 1 - Inclure QDeclarativeItem - Qt Quick 1 - - - Include QQuickItem - Qt Quick 2 - Inclure QQuickItem - Qt Quick 2 - Include QSharedData Inclure QSharedData @@ -41099,6 +41720,10 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d C/C++ C/C++ + + Include QQuickItem + Inclure QQuickItem + C++ Class Classe C++ @@ -41107,16 +41732,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Creates a CMake-based test project for which a code snippet can be entered. Génère un projet de test fondé sur CMake pour lequel un extrait de code peut être saisi. - - int main(int argc, char *argv[]) -{ - return 0; -} - int main(int argc, char *argv[]) -{ - return 0; -} - QtCore QtCore @@ -41357,10 +41972,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Specify details about your custom Qt Creator plugin. Indiquer les détails de votre greffon pour Qt Creator personnalisé. - - %{JS: value('ProjectName').charAt(0).toUpperCase() + value('ProjectName').slice(1)} - %{JS: value('NomDuProjet').charAt(0).toUpperCase() + value('NomDuProjet').slice(1)} - MyCompany MonEntreprise @@ -41377,10 +41988,6 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d Put a short description of your plugin here Indiquer ici une courte description de votre greffon - - https://www.%{JS: encodeURIComponent(value('VendorName').toLowerCase())}.com - https://www.%{JS: encodeURIComponent(value('NomDuVendeur').toLowerCase())}.com - URL: URL : @@ -41575,7 +42182,12 @@ The name of the build configuration created by default for a generic project. %1: Full path to main file. %1 is something like "Active project" - %1 : chemin complet ver le fichier main. + %1 : chemin complet vers le fichier principal. + + + %1: Full path to Project Directory. + %1 is something like "Active project" + %1 : chemin complet vers le répertoire du projet. %1: The name of the active kit. @@ -41642,6 +42254,14 @@ The name of the build configuration created by default for a generic project.&Configure Project &Configurer le projet + + Show All Kits + Afficher tous les kits + + + Hide Inactive Kits + Cacher les kits inactifs + Kit is unsuited for project Le kit n’est pas adapté au projet @@ -42042,6 +42662,11 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Stop running program. Arrêter l’exécution du programme. + + application-output-%1.txt + file name suggested for saving application output, %1 = run configuration display name + sortie-application-%1.txt + Word-wrap output Retour à la ligne automatique @@ -42779,6 +43404,22 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u Type of the project's active build configuration Type de configuration de compilation active du projet + + No build device is set for the kit "%1". + Aucun périphérique de compilation n'est défini pour le kit « %1 ». + + + You can try mounting the folder in your device settings. + Vous pouvez essayer de monter le répertoire dans les paramètres du périphérique. + + + The build device "%1" cannot reach the project directory. + Le périphérique de compilation « %1 » ne peut accéder au répertoire du projet. + + + The build device "%1" cannot reach the build directory. + Le périphérique de compilation « %1 » ne peut accéder au répertoire de compilation. + Remove Name of the action triggering the removetaskhandler @@ -42912,18 +43553,6 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u DebugBreakProcess failed: DebugBreakProcessus a échoué : - - %1 does not exist. If you built %2 yourself, check out https://code.qt.io/cgit/qt-creator/binary-artifacts.git/. - %1 n’existe pas. Si vous avez compilé %2 vous-même, consultez https://code.qt.io/cgit/qt-creator/binary-artifacts.git/. - - - Cannot start %1. Check src\tools\win64interrupt\win64interrupt.c for more information. - Impossible de démarrer %1. Vérifier src\tools\win64interrupt\win64interrupt.c pour plus d’information. - - - could not break the process. - Impossible d’interrompre le processus. - Import Build From... Importer la compilation depuis… @@ -43559,6 +44188,16 @@ au projet « %2 ». * Failed to parse "%1":%2:%3: %4 * Échec de l’analyse de « %1 »:%2:%3 : %4 + + * Did not find a JSON object in "%1". + + * N’a pas trouvé d’objet JSON dans « %1 ». + + + + JsonWizard: "%1" not found. + Assistant Json : « %1 » introuvable. + * Did not find a JSON object in "%1". * N’a pas trouvé d’objet JSON dans « %1 ». @@ -43567,10 +44206,6 @@ au projet « %2 ». * Configuration found and parsed. * La configuration a été trouvée et analysée. - - JsonWizard: "%1" not found - Assistant Json : « %1 » introuvable. - Page is not an object. La page n’est pas un objet. @@ -43943,6 +44578,14 @@ Que doit faire %1 maintenant ? Run as root user Exécuter en tant que super-utilisateur + + Emulator + Émulateur + + + Launcher: + Lanceur : + Interpreter Interpréteur @@ -44118,12 +44761,45 @@ Ces fichiers sont préservés. unavailable indisponible + + You can edit this configuration inside the .qtcreator/project.json file. + Vous pouvez modifier cette configuration dans le fichier .qtcreator/project.json. + + + Exclude from Project + Exclure du projet + + + Rescan Workspace + Ré-analyser l'espace de travail + QtC::Python - Install Python Packages - Installer les paquets Python + Update Requirements + Mettre à jour les paquets nécessaires + + + Install Requirements + Installer les paquets nécessaires + + + Update %1 + %1 = package name + Mettre à jour %1 + + + Install %1 + Installer %1 + + + Update Packages + Mettre à jour les paquets + + + Install Packages + Installer les paquets Running "%1" to install %2. @@ -44261,6 +44937,22 @@ Ces fichiers sont préservés. Install Python language server (PyLS) for %1 (%2). The language server provides Python specific completion and annotation. Installer le serveur de langages Python (PyLS) pour %1 (%2). Le serveur de langages fournit des complétions et des annotations spécifiques à Python. + + Update Python language server (PyLS) for %1 (%2). + Mettre à jour le serveur de langage Python (PyLS) pour %1 (%2). + + + Always Update + Toujours mettre à jour + + + Update + Mettre à jour + + + Never + Jamais + Unable to read "%1": The file is empty. Impossible de lire « %1 » : le fichier est vide. @@ -44828,8 +45520,8 @@ Les fichiers affectés sont : Périphérique « %1 » %2 - Qt Debug Bridge device %1 - Périphérique Qt Debug Bridge %1 + Boot to Qt device %1 + Périphérique Boot to Qt %1 Device detection error: %1 @@ -44875,10 +45567,6 @@ Les fichiers affectés sont : Starting QDB host server. Démarrage du serveur QDB hôte. - - Deploy to Boot2Qt target - Déployer la cible Boot2Qt - Starting command "%1" on device "%2". Démarrage de la commande « %1 » sur le périphérique « %2 ». @@ -44891,21 +45579,21 @@ Les fichiers affectés sont : Command failed on device "%1". Commande échouée sur le périphérique « %1 ». - - stdout was: "%1" - La sortie standard était : « %1 » - - - stderr was: "%1" - La sortie d'erreur était : « %1 » - Commands on device "%1" finished successfully. Les commandes sur le périphérique « %1 » se sont terminées avec succès. - Boot2Qt Device - Périphérique Boot2Qt + stdout was: "%1". + La sortie standard était : « %1 ». + + + stderr was: "%1". + La sortie d'erreur était : « %1 ». + + + Boot to Qt Device + Périphérique Boot to Qt Reboot Device @@ -44940,8 +45628,8 @@ Les fichiers affectés sont : Adresse du périphérique : - Boot2Qt Network Device Setup - Configuration du périphérique réseau Boot2Qt + Boot to Qt Network Device Setup + Configuration du périphérique réseau Boot to Qt Application set as the default one. @@ -44980,14 +45668,22 @@ Les fichiers affectés sont : Refers to Boot2Qt Flasher un périphérique Boot2Qt + + Deploy to Boot to Qt target + Déployer la cible Boot to Qt + Full command line: - Ligne de commande complête : + Ligne de commande complète : Executable on device: Exécutable sur le périphérique : + + Run on Boot to Qt Device + Exécuter sur le périphérique Boot to Qt + Remote path not set Chemin distant indéfini @@ -44997,12 +45693,8 @@ Les fichiers affectés sont : Exécutable sur l’hôte : - Run on Boot2Qt Device - Exécuter sur le périphérique Boot2Qt - - - The remote executable must be set in order to run on a Boot2Qt device. - L'exécutable distant doit être défini afin d'être exécuté sur un périphérique Boot2Qt. + The remote executable must be set to run on a Boot to Qt device. + L'exécutable distant doit être défini afin d'être exécuté sur un périphérique Boot to Qt. No device to stop the application on. @@ -45025,12 +45717,16 @@ Les fichiers affectés sont : Arrêter l'application en cours d'exécution - Boot2Qt: %1 - Boot2Qt : %1 + Boot to Qt: %1 + Boot to Qt : %1 QtC::QmakeProjectManager + + Unable to start "%1". + Impossible de démarrer « %1 ». + Qt Widgets Designer is not responding (%1). Qt Widgets Designer ne répond pas (%1). @@ -45039,10 +45735,6 @@ Les fichiers affectés sont : Unable to create server socket: %1 Impossible de créer le socket serveur : %1 - - Unable to start "%1" - Impossible de démarrer « %1 » - Could not load kits in a reasonable amount of time. Impossible de charger les kits dans le temps imparti. @@ -46386,6 +47078,10 @@ connaître une telle URI à l'éditeur QML. == and != perform type coercion, use === or !== to avoid it. == et != provoquent une coercition de type, utilisez === ou !== pour l’éviter. + + JavaScript can break the visual tooling in Qt Design Studio. + JavaScript peut casser les outils visuels dans Qt Design Studio. + Expression statements should be assignments, calls or delete expressions only. Les définitions d’expression devraient être des expression d’assignation, d’appel ou de suppression uniquement. @@ -46450,10 +47146,6 @@ Pour plus d'informations, allez à la documentation « Checking Code S Missing property "%1". Propriété « %1 » manquante. - - Imperative code is not supported in Qt Design Studio. - Le code impératif n'est pas supporté dans Qt Design Studio. - This type (%1) is not supported in Qt Design Studio. Le type (%1) n'est pas supporté dans Qt Design Studio. @@ -46844,18 +47536,6 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Qt Creator Qt Creator - - Enable QML Language Server (EXPERIMENTAL!) - Activer le serveur de langage QML (EXPÉRIMENTAL !) - - - Use QML Language Server advanced features (renaming, find usages and co.) (EXPERIMENTAL!) - Utiliser les fonctionnalités avancées du langage de serveur QML (renommage, trouver les utilisations…) (EXPÉRIMENTAL !) - - - Use QML Language Server from latest Qt version - Utiliser le serveur de langage QML de la dernière version de Qt - QML Language Server Serveur de langage QML @@ -46864,6 +47544,26 @@ Veuillez compiler l’application qmldump à partir de la page d’options à pr Use customized static analyzer Utiliser l'analyseur statique personnalisé + + Turn on + Activer + + + Allow versions below Qt %1 + Permettre les versions Qt inférieures à %1 + + + Use advanced features (renaming, find usages, and so on) (experimental) + Utiliser les fonctionnalités avancées (renommage, trouver les utilisations, etc.) (expérimental) + + + Use from latest Qt version + Utiliser la dernière version de Qt + + + Create .qmlls.ini files for new projects + Créer des fichiers .qmlls.ini pour les nouveaux projets + Enabled Activé @@ -48212,12 +48912,12 @@ Qt Design Studio nécessite un projet fondé sur .qmlproject pour ouvrir le fich Définir comme le fichier .ui.qml principal - Failed to find valid build system - Impossible de trouver un système de construction valide + Cannot find a valid build system. + Impossible de trouver un système de compilation valide. - Failed to create valid build directory - Impossible de créer un répertoire de construction valide + Cannot create a valid build directory. + Impossible de créer un répertoire de compilation valide. Command: @@ -48240,13 +48940,21 @@ Qt Design Studio nécessite un projet fondé sur .qmlproject pour ouvrir le fich Vous ne pouvez pas utiliser le kit sélectionné pour prévisualiser les applications Qt pour MCU. - Failed to find valid Qt for MCUs kit - Impossible de trouver un kit Qt pour MCUs valide + Cannot find a valid Qt for MCUs kit. + Impossible de trouver un kit Qt pour MCUs valide. Qt for MCUs Deploy Step Étape de déploiement Qt pour MCUs + + Export Project + Exporter le projet + + + Enable Automatic CMake Generation + Activer la génération automatique de CMake + QtC::Qnx @@ -49367,10 +50075,6 @@ Le processus de contrôle n'a pas pu démarrer. Remote Linux Linux distant - - Failed: %1 - Échoué : %1 - Remote Linux Device Périphérique Linux distant @@ -49383,6 +50087,10 @@ Le processus de contrôle n'a pas pu démarrer. Can't send control signal to the %1 device. The device might have been disconnected. Impossible d'envoyer un signal de contrôle au périphérique %1. Le périphérique est peut-être déconnecté. + + Device "%1" is disconnected. + Le périphérique « %1 » est déconnecté. + Deploy Public Key... Déployer la clé publique… @@ -49420,20 +50128,21 @@ Le processus de contrôle n'a pas pu démarrer. Le binaire « sftp » « %1 » n'existe pas. - Creating directory: %1 + Created directory: "%1". - Création du répertoire : %1 + Le répertoire « %1 » a été créé. - Failed. - Échec. + Copied %1/%2: "%3" -> "%4". + + %1/%2 = progress in the form 4/15, %3 and %4 = source and target file paths + %1 sur %2 copiés : « %3 » -> « %4 ». + - Copying %1/%2: %3 -> %4 - - Copie %1/%2 : %3 -> %4 - + Failed to deploy files. + Échec de déploiement des fichiers. Device is considered unconnected. Re-run device test to reset state. @@ -49679,6 +50388,18 @@ Le processus de contrôle n'a pas pu démarrer. &SSH port: Port &SSH : + + Use SSH port forwarding for debugging + Utiliser le transfert du port SSH pour le débogage + + + Enable debugging on remote targes which cannot expose gdbserver ports. +The ssh tunneling is used to map the remote gdbserver port to localhost. +The local and remote ports are determined automatically. + Active le débogage de cibles distantes qui ne peuvent pas exposer de ports gdbserver. +Le tunnel SSH est utilisé pour faire correspondre le port gdbserveur à la machine locale. +Les ports local et distant sont déterminés automatiquement. + Free ports: Ports libres : @@ -49885,16 +50606,16 @@ Le processus de contrôle n'a pas pu démarrer. La méthode de transfert a été rétrogradée de « %1 » à « %2 ». Si cela est inattendu, veuillez refaire un test du périphérique « %3 ». - rsync failed to start: %1 - Démarrage de rsync échoué : %1 + %1 failed to start: %2 + %1 n'a pas pu démarrer : %2 - rsync crashed. - rsync a planté. + %1 crashed. + %1 a planté. - rsync failed with exit code %1. - rsync échoué avec le code de sortie : %1. + %1 failed with exit code %2. + %1 a échoué avec le code de sortie %2. Deploy files @@ -50206,6 +50927,10 @@ Le processus de contrôle n'a pas pu démarrer. Crop and Trim Rogner et tailler + + Cropping + Rognage + Crop and Trim... Rogner et tailler… @@ -52961,14 +53686,6 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Word under the current document's text cursor. Mot sous le curseur de texte du document actuel. - - &Undo - Annu&ler - - - &Redo - &Refaire - Select Encoding... Choisir l’encodage… @@ -53029,6 +53746,10 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Ctrl+Ins Ctrl+Ins + + Sort Lines + Trier les lignes + Fold Plier @@ -53137,10 +53858,6 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Toggle &Fold All Activer/désactiver tout &plier - - Meta+0 - Meta+0 - Go to Block Start with Selection Sélectionner jusqu’au début du bloc @@ -53249,6 +53966,18 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Open Call Hierarchy Ouvrir la hiérarchie d'appel + + Open Type Hierarchy + Ouvrir la hiérarchie de type + + + Meta+Shift+T + Meta+Maj+T + + + Ctrl+Shift+T + Ctrl+Maj+T + Move the View a Page Up and Keep the Cursor Position Déplacer la vue d’une page vers le haut et conserver la position du curseur @@ -53350,8 +54079,20 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Meta+U - &Sort Lines - &Trier les lignes + Go to Previous Word (Camel Case) + Aller au mot précédent (Camel Case) + + + Go to Next Word (Camel Case) + Aller au mot suivant (Camel Case) + + + Go to Previous Word (Camel Case) with Selection + Sélectionner jusqu'au mot précédent (Camel Case) + + + Go to Next Word (Camel Case) with Selection + Sélectionner jusqu'au mot suivant (Camel Case) Ctrl+Shift+Alt+U @@ -53433,14 +54174,6 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Go to Next Word Aller au mot suivant - - Go to Previous Word Camel Case - Aller au mot en Camel Case précédent - - - Go to Next Word Camel Case - Aller au mot en Camel Case suivant - Go to Line Start with Selection Sélectionner jusqu’au début de ligne @@ -53473,14 +54206,6 @@ Une valeur inférieure à 100 % peut entraîner un chevauchement et un mauvais a Go to Next Word with Selection Sélectionner jusqu’au mot suivant - - Go to Previous Word Camel Case with Selection - Sélectionner jusqu’au mot en Camel Case précédent - - - Go to Next Word Camel Case with Selection - Sélectionner jusqu’au mot en Camel Case suivant - <line>:<column> <ligne>:<colonne> @@ -55215,6 +55940,46 @@ Influence l’indentation des lignes de continuation. group:'QML' trigger:'NumberAnimation' avec les cibles + + QuickTest Test Case + group:'QML' trigger:'TestCase' + Cas de test QuickTest + + + GTest Function + group:'C++' trigger:'TEST' + Fonction GTest + + + GTest Fixture + group:'C++' trigger:'TEST_F' + Fixture GTest + + + GTest Parameterized + group:'C++' trigger:'TEST_P' + Test avec paramètres GTest + + + Test Case + group:'C++' trigger:'BOOST_AUTO_TEST_CASE' + Cas de test + + + Test Suite + group:'C++' trigger:'BOOST_AUTO_TEST_SUITE' + Suite de tests + + + Catch Test Case + group:'C++' trigger:'TEST_CASE' + Cas de test Catch + + + Catch Scenario + group:'C++' trigger:'SCENARIO' + Scénario Catch + with target group:'QML' trigger:'NumberAnimation' @@ -55381,6 +56146,18 @@ Influence l’indentation des lignes de continuation. JSON Editor Éditeur JSON + + Type Hierarchy + Hiérarchie de type + + + No type hierarchy available + Aucune hiérarchie de type disponible + + + Reloads the type hierarchy for the symbol under the cursor. + Recharge la hiérarchie de type pour le symbole sous le curseur. + QtC::Todo @@ -56190,6 +56967,10 @@ Les données de la trace sont perdues. createTempFile is not implemented for "%1". createTempFile n'est pas implémenté pour « %1 ». + + watch is not implemented. + L'observation n'est pas implémentée. + Refusing to remove the standard directory "%1". Refus de suppression du répertoire standard « %1 ». @@ -56412,6 +57193,14 @@ Les données de la trace sont perdues. No destination directory set. Aucun répertoire de destination défini. + + Failed to open output file. + Échec lors de l'ouverture du fichier. + + + Failed to write output file. + Échec lors de l'écriture du fichier. + Command failed. Échec de la commande. @@ -56440,8 +57229,8 @@ dans « %2 ». Désactiver - Leave at Default - Laisser par défaut + Default + Défaut Show %1 Column @@ -56463,22 +57252,6 @@ dans « %2 ». Edit Environment Modifier l’environnement - - Enter one environment variable per line. -To set or change a variable, use VARIABLE=VALUE. -To append to a variable, use VARIABLE+=VALUE. -To prepend to a variable, use VARIABLE=+VALUE. -Existing variables can be referenced in a VALUE with ${OTHER}. -To clear a variable, put its name on a line with nothing else on it. -To disable a variable, prefix the line with "#". - Saisir une variable d’environnement par ligne. -Pour définir ou modifier une variable, utiliser VARIABLE=VALEUR. -Pour ajouter une variable, utiliser VARIABLE+=VALEUR. -Pour ajouter une variable à l’avance, utiliser VARIABLE=+VALUE. -Les variables existantes peuvent être référencées dans une VALEUR avec ${AUTRE}. -Pour effacer une variable, placez son nom sur une ligne sans rien d’autre. -Pour désactiver une variable, préfixer la ligne par « # ». - %1 on %2 File on device @@ -56646,6 +57419,24 @@ Pour désactiver une variable, préfixer la ligne par « # ».Minimize Minimiser + + Enter one environment variable per line. +To set or change a variable, use VARIABLE=VALUE. +To disable a variable, prefix this line with "#". +To append to a variable, use VARIABLE+=VALUE. +To prepend to a variable, use VARIABLE=+VALUE. +Existing variables can be referenced in a VALUE with ${OTHER}. +To clear a variable, put its name on a line with nothing else on it. +Lines starting with "##" will be treated as comments. + Saisissez une variable d'environnement par ligne. +Pour définir ou changer une variable, utilisez VARIABLE=VALEUR. +Pour désactiver une variable, préfixez la ligne avec le caractère « # ». +Pour suffixer une variable, utilisez VARIABLE+=VALEUR. +Pour préfixer une variable, utilisez VARIABLE=+VALEUR. +Les variables existantes peuvent être référencées dans une VALEUR avec ${OTHER}. +Pour effacer une variable, placez son nom sur une ligne avec rien d'autre sur celle-ci. +Les lignes débutant avec « ### » seront traitées comme commentaires. + &OK &OK @@ -56834,6 +57625,10 @@ Pour désactiver une variable, préfixer la ligne par « # ».Could not find any shell. Impossible de trouver un shell. + + No Lua interface set + Aucune interface Lua n'est définie + QtC::Valgrind @@ -58104,10 +58899,6 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon Open "%1" Ouvrir « %1 » - - Clear - Effacer - Running: %1 Exécution de : %1 @@ -58118,7 +58909,7 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon The directory %1 could not be deleted. - Le répertoire %1 ne peut pas être supprimer. + Le répertoire %1 ne peut pas être supprimé. The file %1 could not be deleted. @@ -58921,6 +59712,10 @@ Pour en savoir plus sur les contrôles mis en évidence, voir l’<a style=&q Center Horizontally Centrer horizontalement + + Open Linked File + Ouvrir le fichier lié + Align Bottom Aligner en bas @@ -58957,10 +59752,6 @@ Pour en savoir plus sur les contrôles mis en évidence, voir l’<a style=&q Equal Vertical Space Espace vertical identique - - Add Related Elements - Ajouter éléments connexes - New Package Nouveau paquet @@ -59037,6 +59828,34 @@ Pour en savoir plus sur les contrôles mis en évidence, voir l’<a style=&q [unnamed] [sans nom] + + Reset + Réinitialiser + + + Relations + Relations + + + Diagram Elements + Éléments diagrammes + + + Clear + Effacer + + + View + Vue + + + Filter + Filtre + + + Type: + Type : + Stereotypes: Stéréotypes : @@ -59304,6 +60123,14 @@ Membres : Shape: Forme : + + Warning + Avertissement + + + Error + Erreur + Intermediate points: Points intermédiaires : @@ -59400,6 +60227,30 @@ Membres : Relocate Relation Déplacer relation + + Relation Attributes + Relation d'attributs + + + Type + Type + + + Direction + Direction + + + Stereotypes + Stéréotypes + + + Other Element Attributes + Autres attributs d'élément + + + Number of matching elements: + Nombre d'éléments correspondants : + RadioButtonSpecifics @@ -59670,10 +60521,26 @@ définit dans la taille de pas. Row spacing Espacement des lignes + + Sets the space between the items in pixels in the <b>Row Layout</b>. + Définit l'espacement en pixels entre les éléments de l'<b>agencement en ligne</b>. + Layout direction Direction du layout + + Sets the direction of the item flow in the <b>Row Layout</b>. + Définit la direction du flux des éléments dans l'<b>agencement en ligne</b>. + + + Uniform cell size + Taille de cellules uniforme + + + Toggles all cells to have a uniform size. + Active/désactive une taille commune pour toutes les cellules. + RowSpecifics @@ -59713,16 +60580,20 @@ définit dans la taille de pas. Le nom contient des caractères invalides. - Name must start with a capital letter - Le nom doit commencer par une lettre majuscule + Name must start with a capital letter. + Le nom doit commencer par une lettre majuscule. - Name must have at least 3 characters - Le nom doit contenir au moins trois caractères + Name must have at least 3 characters. + Le nom doit contenir au moins trois caractères. - Name cannot contain white space - Le nom ne peut pas contenir d'espace + Name cannot contain white space. + Le nom ne peut pas contenir d'espace. + + + Name is already taken. + Le nom est déjà pris. Save @@ -59884,6 +60755,18 @@ Elle est utilisée pour calculer la taille totale implicite. Active/désactive la visibilité des icônes, telle que l'icône de caméra ou l'icône des lumières. + + ShowLookAtAction + + Show Look-at + où la caméra pointe/direction + Afficher la direction du regard + + + Toggle the visibility of the edit camera look-at indicator. + Active/désactive l'indicateur pour modifier la direction de la caméra. + + ShowParticleEmitterAction @@ -60324,6 +61207,10 @@ atteint le début ou la fin. Current index Indice actuel + + Sets the index of the child item currently visible in the <b>Stack Layout</b>. + Définit l'index de l'élément enfant actuellement visible dans l'<b>agencement en pile</b>. + StackViewSpecifics @@ -60716,6 +61603,13 @@ atteint le début ou la fin. Dark + + SubComponentManager::parseDirectory + + Invalid meta info + Métadonnées invalides + + SwipeViewSpecifics @@ -61602,18 +62496,18 @@ début ou la fin. - UnimportBundleMaterialDialog + UnimportBundleItemDialog - Bundle material might be in use - Le matériau embarqué est peut-être en cours d'utilisation + Bundle %1 might be in use + Le bundle %1 est peut-être en cours d'utilisation If the %1 you are removing is in use, it might cause the project to malfunction. -Are you sure you want to remove the %1? - Si en cours d'utilisation, la suppression de %1 peut entraîner à un dysfonctionnement du projet. +Are you sure you want to remove it? + Si le bundle %1 que vous souhaitez supprimer est utilisé, cela peut provoquer un dysfonctionnement du projet. -Voulez-vous vraiment supprimer %1 ? +Voulez-vous vraiment le supprimer ? Remove @@ -61737,6 +62631,21 @@ Voulez-vous vraiment supprimer %1 ? Qt Design Studio + + WidgetPluginManager + + Failed to create instance of file "%1": %2 + Impossible de créer une instance à partir du fichier « %1 » : %2 + + + Failed to create instance of file "%1". + Impossible de créer une instance à partir du fichier « %1 ». + + + File "%1" is not a Qt Quick Designer plugin. + Le fichier « %1 » n'est pas un greffon Qt Quick Designer. + + WindowSpecifics From bef8cf703dd6c129f32a63c3f60c103cb4523d2d Mon Sep 17 00:00:00 2001 From: Cristian Adam Date: Tue, 16 Jul 2024 19:58:20 +0200 Subject: [PATCH 09/46] CMakePM: Mark CMake presets registered toolchains as Manual By default are marked as Autodetected, which is not the case for CMake presets. Fixes: QTCREATORBUG-31255 Change-Id: I5c3da7c6e7c68a8a2e80e415393010121b33efb4 Reviewed-by: Alessandro Portale --- src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp index d3f1f07ed19..ede77f38a46 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeprojectimporter.cpp @@ -1168,6 +1168,10 @@ Kit *CMakeProjectImporter::createKit(void *directoryData) const if (!cmtcd.originalTargetTriple.isEmpty()) toolchain->setExplicitCodeModelTargetTriple(cmtcd.originalTargetTriple); + // Mark CMake presets toolchains as manual + if (!data->cmakePresetDisplayname.isEmpty() && tcd.areTemporary) + toolchain->setDetection(Toolchain::ManualDetection); + ToolchainKitAspect::setToolchain(k, toolchain); } From 2db96fcbca3b961a14d3601838afcb6ba41082da Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 11 Jul 2024 12:35:11 +0200 Subject: [PATCH 10/46] Android: Be more verbose on installQASIPackage() Change-Id: I661b94114e912087b1fd8d15db7cd86088a4749e Reviewed-by: Alessandro Portale --- src/plugins/android/androidmanager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index dac4eb3c8e4..f1841898955 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -606,7 +606,16 @@ void installQASIPackage(Target *target, const FilePath &packagePath) Process *process = startAdbProcess(arguments, &error); if (process) { // TODO: Potential leak when the process is still running on Creator shutdown. - QObject::connect(process, &Process::done, process, &QObject::deleteLater); + QObject::connect(process, &Process::done, target, [process] { + if (process->result() == ProcessResult::FinishedWithSuccess) { + MessageManager::writeSilently( + Tr::tr("Android package installation finished with success.")); + } else { + MessageManager::writeDisrupting(Tr::tr("Android package installation failed.") + + '\n' + process->cleanedStdErr()); + } + process->deleteLater(); + }); } else { MessageManager::writeDisrupting( Tr::tr("Android package installation failed.\n%1").arg(error)); From 2b620aca7e7253cd805f31b9f4dcb187147a8915 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 11 Jul 2024 12:07:00 +0200 Subject: [PATCH 11/46] Android: Fix installQASIPackage() command Currently the installation always fails with the following message on std err: No argument expected after "-r ". Removing the space after the -r arg seems to fix the issue and process finishes with success. Change-Id: I035442da0168580939f9b851554e8ec96713f99e Reviewed-by: Alessandro Portale --- src/plugins/android/androidmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index f1841898955..47452057d0c 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -601,7 +601,7 @@ void installQASIPackage(Target *target, const FilePath &packagePath) } QStringList arguments = AndroidDeviceInfo::adbSelector(deviceSerialNumber); - arguments << "install" << "-r " << packagePath.path(); + arguments << "install" << "-r" << packagePath.path(); QString error; Process *process = startAdbProcess(arguments, &error); if (process) { From 77fa73c5244c39cc1bcde7834ac7eb67bc90ec71 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 11 Jul 2024 12:28:23 +0200 Subject: [PATCH 12/46] Android: Fix potential process leak Make process a child of Target. Change-Id: If77a54120044829b6551cd0f6446e3edffa28558 Reviewed-by: Alessandro Portale --- src/plugins/android/androidmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 47452057d0c..86a5de3854e 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -605,7 +605,7 @@ void installQASIPackage(Target *target, const FilePath &packagePath) QString error; Process *process = startAdbProcess(arguments, &error); if (process) { - // TODO: Potential leak when the process is still running on Creator shutdown. + process->setParent(target); QObject::connect(process, &Process::done, target, [process] { if (process->result() == ProcessResult::FinishedWithSuccess) { MessageManager::writeSilently( From eca1fa3b2fd0a93b01418b462642c5ada6fdb9f0 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 11 Jul 2024 15:52:28 +0200 Subject: [PATCH 13/46] Android: Fix a crash on Creator shutdown during app startup The AndroidRunnerWorker lives in a separate thread created by AndroidRunner. Thus, we can't delete it directly from the AndroidRunner's d'tor. Instead, we connect to QThread's finished() signal and delete the worker later. Make m_pidRunner a child of AndroidRunnerWorker so that it's moved together with its parent to the other thread. Change-Id: I5c3723315ee5183fa8451f0706311b14f173dca1 Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunner.cpp | 19 ++++++++++--------- src/plugins/android/androidrunner.h | 2 +- src/plugins/android/androidrunnerworker.cpp | 1 + 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/plugins/android/androidrunner.cpp b/src/plugins/android/androidrunner.cpp index 260bef647f5..904b7c71762 100644 --- a/src/plugins/android/androidrunner.cpp +++ b/src/plugins/android/androidrunner.cpp @@ -54,23 +54,24 @@ AndroidRunner::AndroidRunner(RunControl *runControl, const QString &intentName) const int apiLevel = AndroidManager::deviceApiLevel(m_target); qCDebug(androidRunnerLog) << "Device API:" << apiLevel; - m_worker.reset(new AndroidRunnerWorker(this, m_packageName)); + m_worker = new AndroidRunnerWorker(this, m_packageName); m_worker->setIntentName(intent); m_worker->setIsPreNougat(apiLevel <= 23); m_worker->moveToThread(&m_thread); + QObject::connect(&m_thread, &QThread::finished, m_worker, &QObject::deleteLater); - connect(this, &AndroidRunner::asyncStart, m_worker.data(), &AndroidRunnerWorker::asyncStart); - connect(this, &AndroidRunner::asyncStop, m_worker.data(), &AndroidRunnerWorker::asyncStop); + connect(this, &AndroidRunner::asyncStart, m_worker, &AndroidRunnerWorker::asyncStart); + connect(this, &AndroidRunner::asyncStop, m_worker, &AndroidRunnerWorker::asyncStop); connect(this, &AndroidRunner::androidDeviceInfoChanged, - m_worker.data(), &AndroidRunnerWorker::setAndroidDeviceInfo); - connect(m_worker.data(), &AndroidRunnerWorker::remoteProcessStarted, + m_worker, &AndroidRunnerWorker::setAndroidDeviceInfo); + + connect(m_worker, &AndroidRunnerWorker::remoteProcessStarted, this, &AndroidRunner::handleRemoteProcessStarted); - connect(m_worker.data(), &AndroidRunnerWorker::remoteProcessFinished, + connect(m_worker, &AndroidRunnerWorker::remoteProcessFinished, this, &AndroidRunner::handleRemoteProcessFinished); - connect(m_worker.data(), &AndroidRunnerWorker::remoteOutput, - this, &AndroidRunner::remoteOutput); - connect(m_worker.data(), &AndroidRunnerWorker::remoteErrorOutput, + connect(m_worker, &AndroidRunnerWorker::remoteOutput, this, &AndroidRunner::remoteOutput); + connect(m_worker, &AndroidRunnerWorker::remoteErrorOutput, this, &AndroidRunner::remoteErrorOutput); connect(&m_outputParser, &QmlDebug::QmlOutputParser::waitingForConnectionOnPort, diff --git a/src/plugins/android/androidrunner.h b/src/plugins/android/androidrunner.h index 6b15d8fff44..856ad314c1c 100644 --- a/src/plugins/android/androidrunner.h +++ b/src/plugins/android/androidrunner.h @@ -56,7 +56,7 @@ private: QString m_launchedAVDName; QThread m_thread; QTimer m_checkAVDTimer; - QScopedPointer m_worker; + AndroidRunnerWorker *m_worker = nullptr; QPointer m_target; Utils::Port m_debugServerPort; QUrl m_qmlServer; diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 9befaba742a..095c6e99e84 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -203,6 +203,7 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa QtSupport::QtVersion *version = QtSupport::QtKitAspect::qtVersion(target->kit()); m_useAppParamsForQmlDebugger = version->qtVersion() >= QVersionNumber(5, 12); + m_pidRunner.setParent(this); // Move m_pidRunner object together with *this into a separate thread. } AndroidRunnerWorker::~AndroidRunnerWorker() From 63c48e01998a30e63b73621cf1d648a0dcc7572b Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 17 Jul 2024 12:11:55 +0200 Subject: [PATCH 14/46] Doc: Update sceenshot of CTF Vizualizer Timeline To use the new yellow numbers. Change the order of numbers to make them easier to find. Change-Id: Ibf31238e990e295cf2bfadd062c9ac62f2575a27 Reviewed-by: Eike Ziller --- .../qtcreator-ctf-visualizer-timeline.png | Bin 35155 -> 0 bytes .../qtcreator-ctf-visualizer-timeline.webp | Bin 0 -> 18198 bytes .../src/analyze/creator-ctf-visualizer.qdoc | 22 +++++++++--------- 3 files changed, 11 insertions(+), 11 deletions(-) delete mode 100644 doc/qtcreator/images/qtcreator-ctf-visualizer-timeline.png create mode 100644 doc/qtcreator/images/qtcreator-ctf-visualizer-timeline.webp diff --git a/doc/qtcreator/images/qtcreator-ctf-visualizer-timeline.png b/doc/qtcreator/images/qtcreator-ctf-visualizer-timeline.png deleted file mode 100644 index a64c7f47e5297546c75dd26ba805e64eb0384bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35155 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%0D&x;+@un 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

y&R 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/analyze/creator-ctf-visualizer.qdoc b/doc/qtcreator/src/analyze/creator-ctf-visualizer.qdoc index 8f02ee0607e..473bea2bd8a 100644 --- a/doc/qtcreator/src/analyze/creator-ctf-visualizer.qdoc +++ b/doc/qtcreator/src/analyze/creator-ctf-visualizer.qdoc @@ -60,32 +60,32 @@ The \uicontrol Timeline view displays a graphical representation of trace events and a condensed view of all recorded events. - \image qtcreator-ctf-visualizer-timeline.png "Chrome Trace Format Visualizer" + \image qtcreator-ctf-visualizer-timeline.webp {Timeline view} Each category in the timeline describes a thread in the application. Move - the cursor on an event (1) on a row to view its duration and event category. + the cursor on an event (5) on a row to view its duration and event category. To display the information only when an event is selected, disable the - \uicontrol {View Event Information on Mouseover} button (2). + \uicontrol {View Event Information on Mouseover} button (4). - The outline (3) summarizes the period for which data was collected. Drag - the zoom range (4) or click the outline to move on the outline. To move + The outline (10) summarizes the period for which data was collected. Drag + the zoom range (8) or click the outline to move on the outline. To move between events, select the \uicontrol {Jump to Previous Event} and - \uicontrol {Jump to Next Event} buttons (5). + \uicontrol {Jump to Next Event} buttons (1). - Select the \uicontrol {Show Zoom Slider} button (6) to open a slider that - you can use to set the zoom level. You can also drag the zoom handles (7). + Select the \uicontrol {Show Zoom Slider} button (2) to open a slider that + you can use to set the zoom level. You can also drag the zoom handles (9). To reset the default zoom level, right-click the timeline to open the context menu, and select \uicontrol {Reset Zoom}. Select the \inlineimage icons/filtericon.png - (\uicontrol {Restrict to Threads}) button (10) to select the threads to + (\uicontrol {Restrict to Threads}) button (6) to select the threads to show. \section2 Selecting Event Ranges - You can select an event range (8) to view the time it represents or to zoom + You can select an event range (7) to view the time it represents or to zoom into a specific region of the trace. Select the \uicontrol {Select Range} - button (9) to activate the selection tool. Then click in the timeline to + button (3) to activate the selection tool. Then click in the timeline to specify the beginning of the event range. Drag the selection handle to define the end of the range. From 3bb3fbd6984bd11b662aef79083aa1bed0b5015c Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 16 Jul 2024 17:26:29 +0200 Subject: [PATCH 15/46] Doc: Add Python Window UI tutorial to the sidebar TOC Change-Id: I7550d0e388d08e5ded3baa2d87089f98d6c3b62f Reviewed-by: Eike Ziller --- doc/qtcreator/config/style/qt5-sidebar.html | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/qtcreator/config/style/qt5-sidebar.html b/doc/qtcreator/config/style/qt5-sidebar.html index 5977847f100..c5c9f62c161 100644 --- a/doc/qtcreator/config/style/qt5-sidebar.html +++ b/doc/qtcreator/config/style/qt5-sidebar.html @@ -38,6 +38,7 @@

  • Qt Quick debugging
  • Qt Widgets and Python
  • Qt Widgets application
  • +
  • Qt Widgets UI and Python
  • Use internal libraries with qmake
  • Tutorials
  • From bb2ad2d73f6f48f1675896fc90282efd6ce193e8 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 16 Jul 2024 13:48:46 +0200 Subject: [PATCH 16/46] Doc: Add topics to more groups Change-Id: I4c6c7faad4220a7be8c0539aa55008ed79731a8b Reviewed-by: Eike Ziller --- .../src/projects/creator-only/creator-how-to-add-wizards.qdoc | 1 + doc/qtcreator/src/vcs/creator-only/creator-vcs.qdoc | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/qtcreator/src/projects/creator-only/creator-how-to-add-wizards.qdoc b/doc/qtcreator/src/projects/creator-only/creator-how-to-add-wizards.qdoc index e6cb582b9bc..60cc8f4d7e0 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-how-to-add-wizards.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-how-to-add-wizards.qdoc @@ -6,6 +6,7 @@ \previouspage creator-how-tos.html \ingroup creator-how-to-projects-create + \ingroup creator-how-to-projects-files \title Add wizards diff --git a/doc/qtcreator/src/vcs/creator-only/creator-vcs.qdoc b/doc/qtcreator/src/vcs/creator-only/creator-vcs.qdoc index c0c8386911f..810b8f79b0f 100644 --- a/doc/qtcreator/src/vcs/creator-only/creator-vcs.qdoc +++ b/doc/qtcreator/src/vcs/creator-only/creator-vcs.qdoc @@ -79,6 +79,7 @@ \previouspage creator-how-tos.html \ingroup creator-how-to-projects-create + \ingroup creator-how-to-projects-configure \title Create VCS repositories for new projects From b160b367d1ad7bf01d48e2df4240993545d3a0e5 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Thu, 18 Jul 2024 10:27:57 +0200 Subject: [PATCH 17/46] Doc: Fix QDoc warnings in Extending Qt Creator Manual Change-Id: I278ae2338427a7d65253d579d0a1ff7d53245c45 Reviewed-by: hjk --- doc/qtcreatordev/src/qtcreator-ui-text.qdoc | 2 +- src/libs/utils/filepath.cpp | 4 ++-- src/libs/utils/layoutbuilder.cpp | 4 ++-- src/plugins/coreplugin/icore.cpp | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/qtcreatordev/src/qtcreator-ui-text.qdoc b/doc/qtcreatordev/src/qtcreator-ui-text.qdoc index e76ad238e23..43a61dc1505 100644 --- a/doc/qtcreatordev/src/qtcreator-ui-text.qdoc +++ b/doc/qtcreatordev/src/qtcreator-ui-text.qdoc @@ -474,7 +474,7 @@ \li Mode \li Modes correspond to complete screens of controls, specialized for a task. - \image qtcreator-mode-selector.png {Mode selector} + \image qtcreator-mode-selector.webp {Mode selector} \li You can add a mode for a new type of editor, for example. Use descriptive, but short mode names. They have to fit in the \uicontrol {Mode selector}. diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 23a6ff24129..7aa31822582 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -304,9 +304,9 @@ bool FilePath::equals(const FilePath &first, const FilePath &second, Qt::CaseSen } /*! - * Returns true if the two file paths compare equal case-sensitively. + * Returns \c true if this file path compares equal to \a other case-sensitively. * This is relevant on semi-case sensitive systems like Windows with NTFS. - * @see QTCREATORBUG-30846 + * \sa {https://bugreports.qt.io/browse/QTCREATORBUG-30846}{QTCREATORBUG-30846} */ bool FilePath::equalsCaseSensitive(const FilePath &other) const { diff --git a/src/libs/utils/layoutbuilder.cpp b/src/libs/utils/layoutbuilder.cpp index 6f33e4f5ca4..6893205e4ba 100644 --- a/src/libs/utils/layoutbuilder.cpp +++ b/src/libs/utils/layoutbuilder.cpp @@ -362,7 +362,7 @@ void Layout::setContentsMargins(int left, int top, int right, int bottom) } /*! - Attaches the constructed layout to the provided QWidget \a w. + Attaches the constructed layout to the provided QWidget \a widget. This operation can only be performed once per LayoutBuilder instance. */ @@ -373,7 +373,7 @@ void Layout::attachTo(QWidget *widget) } /*! - Adds the layout item \a item as sub items. + Adds the layout item \a item as a sub item. */ void Layout::addItem(I item) { diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 83a0cb3cdc4..0451144a0df 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -851,7 +851,7 @@ QList ICore::currentContextObjects() Returns the widget of the top level IContext of the current context, or \c nullptr if there is none. - \sa currentContextObject() + \sa currentContextObjects() */ QWidget *ICore::currentContextWidget() { @@ -2300,7 +2300,7 @@ QList ICore::contextObjects(QWidget *widget) \sa removeContextObject() \sa updateAdditionalContexts() - \sa currentContextObject() + \sa currentContextObjects() \sa {The Action Manager and Commands} */ @@ -2319,7 +2319,7 @@ void ICore::addContextObject(IContext *context) \sa addContextObject() \sa updateAdditionalContexts() - \sa currentContextObject() + \sa currentContextObjects() */ void ICore::removeContextObject(IContext *context) From 1525f64b9aed58f56455dabb4145c964d40190c2 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Thu, 18 Jul 2024 18:03:11 +0200 Subject: [PATCH 18/46] Android: Fix asserts triggered on app startup The QVariant values of Store map are apparently of QStringList type, not QString. This fixes the following asserts triggered on every startup: "sd.first().typeId() == QMetaType::QString". Change-Id: I84eb6a942503632d047939b138727c75e9e7037e Reviewed-by: Alessandro Portale --- src/plugins/android/androidrunnerworker.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/plugins/android/androidrunnerworker.cpp b/src/plugins/android/androidrunnerworker.cpp index 095c6e99e84..a764167f365 100644 --- a/src/plugins/android/androidrunnerworker.cpp +++ b/src/plugins/android/androidrunnerworker.cpp @@ -171,24 +171,26 @@ AndroidRunnerWorker::AndroidRunnerWorker(RunWorker *runner, const QString &packa m_extraAppParams = runControl->commandLine().arguments(); if (const Store sd = runControl->settingsData(Constants::ANDROID_AM_START_ARGS); - !sd.values().isEmpty()) { + !sd.isEmpty()) { QTC_CHECK(sd.first().typeId() == QMetaType::QString); const QString startArgs = sd.first().toString(); m_amStartExtraArgs = ProcessArgs::splitArgs(startArgs, OsTypeOtherUnix); } if (const Store sd = runControl->settingsData(Constants::ANDROID_PRESTARTSHELLCMDLIST); - !sd.values().isEmpty()) { - QTC_CHECK(sd.first().typeId() == QMetaType::QString); - const QStringList commands = sd.first().toString().split('\n', Qt::SkipEmptyParts); + !sd.isEmpty()) { + const QVariant &first = sd.first(); + QTC_CHECK(first.typeId() == QMetaType::QStringList); + const QStringList commands = first.toStringList(); for (const QString &shellCmd : commands) m_beforeStartAdbCommands.append(QString("shell %1").arg(shellCmd)); } if (const Store sd = runControl->settingsData(Constants::ANDROID_POSTFINISHSHELLCMDLIST); - !sd.values().isEmpty()) { - QTC_CHECK(sd.first().typeId() == QMetaType::QString); - const QStringList commands = sd.first().toString().split('\n', Qt::SkipEmptyParts); + !sd.isEmpty()) { + const QVariant &first = sd.first(); + QTC_CHECK(first.typeId() == QMetaType::QStringList); + const QStringList commands = first.toStringList(); for (const QString &shellCmd : commands) m_afterFinishAdbCommands.append(QString("shell %1").arg(shellCmd)); } From 2970b6c85ecd0458cefc613df15bec6a5c3456ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 18 Jul 2024 22:13:24 +0200 Subject: [PATCH 19/46] SquishTests: Use newest Kit in tst_designer_edit The old MinGW can't compile the used project anymore. Even configuring already fails. Testing compatibility with old Qt versions and compilers isn't the purpose of this test, so it can simply move to newer ones. Change-Id: Ie21a5a726c33b4073f2aa4d955e2e5ea943bf9bc Reviewed-by: Christian Stenger --- tests/system/suite_tools/tst_designer_edit/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_tools/tst_designer_edit/test.py b/tests/system/suite_tools/tst_designer_edit/test.py index 96e289df885..68afd344dee 100644 --- a/tests/system/suite_tools/tst_designer_edit/test.py +++ b/tests/system/suite_tools/tst_designer_edit/test.py @@ -167,7 +167,7 @@ def main(): startQC() if not startedWithoutPluginError(): return - createProject_Qt_GUI(tempDir(), "DesignerTestApp", False) + createProject_Qt_GUI(tempDir(), "DesignerTestApp", False, targets=[Targets.DESKTOP_6_2_4]) selectFromLocator("mainwindow.ui") replaceEditorContent(waitForObject("{container=':*Qt Creator.Widget Box_QDockWidget' " "type='QLineEdit' visible='1'}"), "combo") From a5b2c648bc9207813bb23122b1a58ae4311a2966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 18 Jul 2024 23:49:40 +0200 Subject: [PATCH 20/46] SquishTests: Update expected page title in WELP04 Change-Id: Ib0a78b9b7aacbf5cf76d3a402e62239239592248 Reviewed-by: Christian Stenger --- tests/system/suite_WELP/tst_WELP04/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/system/suite_WELP/tst_WELP04/test.py b/tests/system/suite_WELP/tst_WELP04/test.py index 6ccf2f0d3ac..21b4b515bbf 100644 --- a/tests/system/suite_WELP/tst_WELP04/test.py +++ b/tests/system/suite_WELP/tst_WELP04/test.py @@ -43,7 +43,7 @@ def main(): progressBarWait(warn=False) # select a text tutorial mouseClick(waitForObjectItem(listView, str(tutorial.text))) - test.verify("Building and Running an Example" in + test.verify("Tutorial: Build and run" in str(waitForObject(":Help Widget_Help::Internal::HelpWidget").windowTitle), "Verifying: The tutorial is opened inside Help.") # close help widget again to avoid focus issues From 8a060b285a8a50d29fe18d7179fa29b63565afe2 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 17 Jul 2024 14:15:40 +0200 Subject: [PATCH 21/46] Fix in-wizard translation support We in principle support a map of locale->string for keys starting with "tr" like "trDisplayName". This didn't work everywhere. We may not cast the value for these keys to QString before passing it to `localizedString`, since that would result in an empty string if the value is such a map. Also fix the documentation since we remove all parts from '_' (to also get rid of encoding parts). Fixes: QTCREATORBUG-23575 Change-Id: I2be795053e645c8bf81417d0db69cd7e63eff022 Reviewed-by: Christian Stenger --- .../creator-projects-custom-wizards-json.qdocinc | 4 ++-- .../projectexplorer/jsonwizard/jsonfieldpage.cpp | 13 +++++++------ .../jsonwizard/jsonwizardfactory.cpp | 7 +++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc index f2d8d254249..d6b714bb7c7 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-custom-wizards-json.qdocinc @@ -52,13 +52,13 @@ translations in the .json file using the following syntax: \code - "trDisplayName": { "C": "default", "en_US": "english", "de_DE": "deutsch" } + "trDisplayName": { "C": "default", "en": "english", "de": "deutsch" } \endcode For example: \code - "trDisplayName": { "C": "Project Location", "en_US": "Project Location", "de_DE": "Projekt Verzeichnis" } + "trDisplayName": { "C": "Project Location", "en": "Project Location", "de": "Projektverzeichnis" } \endcode \section1 Creating Wizards diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index ca4220ebef4..d3d747c1a89 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -85,7 +85,7 @@ static QString translatedOrUntranslatedText(QVariantMap &map, const QString &key { if (key.size() >= 1) { const QString trKey = "tr" + key.at(0).toUpper() + key.mid(1); // "text" -> "trText" - const QString trValue = JsonWizardFactory::localizedString(consumeValue(map, trKey).toString()); + const QString trValue = JsonWizardFactory::localizedString(consumeValue(map, trKey)); if (!trValue.isEmpty()) return trValue; } @@ -188,9 +188,10 @@ JsonFieldPage::Field *JsonFieldPage::Field::parse(const QVariant &input, QString *errorMessage = Tr::tr("Field \"%1\" has unsupported type \"%2\".").arg(name).arg(type); return nullptr; } - data->setTexts(name, - JsonWizardFactory::localizedString(consumeValue(tmp, DISPLAY_NAME_KEY).toString()), - JsonWizardFactory::localizedString(consumeValue(tmp, TOOLTIP_KEY).toString())); + data->setTexts( + name, + JsonWizardFactory::localizedString(consumeValue(tmp, DISPLAY_NAME_KEY)), + JsonWizardFactory::localizedString(consumeValue(tmp, TOOLTIP_KEY))); data->setVisibleExpression(consumeValue(tmp, VISIBLE_KEY, true)); data->setEnabledExpression(consumeValue(tmp, ENABLED_KEY, true)); @@ -974,7 +975,7 @@ std::unique_ptr createStandardItemFromListItem(const QVariant &it auto standardItem = std::make_unique(); if (item.typeId() == QMetaType::QVariantMap) { QVariantMap tmp = item.toMap(); - const QString key = JsonWizardFactory::localizedString(consumeValue(tmp, "trKey", QString()).toString()); + const QString key = JsonWizardFactory::localizedString(consumeValue(tmp, "trKey")); const QVariant value = consumeValue(tmp, "value", key); if (key.isNull() || key.isEmpty()) { @@ -985,7 +986,7 @@ std::unique_ptr createStandardItemFromListItem(const QVariant &it standardItem->setData(value, ListField::ValueRole); standardItem->setData(consumeValue(tmp, "condition", true), ListField::ConditionRole); standardItem->setData(consumeValue(tmp, "icon"), ListField::IconStringRole); - standardItem->setToolTip(JsonWizardFactory::localizedString(consumeValue(tmp, "trToolTip", QString()).toString())); + standardItem->setToolTip(JsonWizardFactory::localizedString(consumeValue(tmp, "trToolTip"))); warnAboutUnsupportedKeys(tmp, QString(), "List"); } else { const QString keyvalue = item.toString(); diff --git a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp index 6da06b0616a..4870056c9bf 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonwizardfactory.cpp @@ -763,10 +763,9 @@ QString JsonWizardFactory::localizedString(const QVariant &value) return {}; if (value.typeId() == QMetaType::QVariantMap) { QVariantMap tmp = value.toMap(); - const QString locale = languageSetting().toLower(); - QStringList locales; - locales << locale << QLatin1String("en") << QLatin1String("C") << tmp.keys(); - for (const QString &locale : std::as_const(locales)) { + const QString currentLocale = languageSetting().toLower(); + const QStringList locales{currentLocale, "en", "C"}; + for (const QString &locale : locales) { QString result = tmp.value(locale, QString()).toString(); if (!result.isEmpty()) return result; From 69906c6525ab3b6aeca7e1fe9787bd9e417a706b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 19 Jul 2024 11:14:22 +0200 Subject: [PATCH 22/46] Update qbs module to HEAD of 2.4 branch Change-Id: If06b28c8b98c823e2020d3e3be0229605faf5913 Reviewed-by: Christian Stenger --- src/shared/qbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qbs b/src/shared/qbs index 65096dc8307..70e60671e71 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit 65096dc8307979b973cd1fe3e01bc959384d2a20 +Subproject commit 70e60671e71730f294530349d1fc57cec9d215ee From e8855f97d59670f8be8103bbe662de761a225f39 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 18 Jul 2024 16:20:44 +0200 Subject: [PATCH 23/46] Utils: Expand FilePaths per part, not as a full string Avoid the potential side effects from the toString/fromUserInput round trip. Fixes: QTCREATORBUG-31259 Change-Id: Id004d71079b4ef8ac26b927921c5cd7a23531110 Reviewed-by: Christian Stenger Reviewed-by: Christian Kandeler --- src/libs/utils/macroexpander.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/macroexpander.cpp b/src/libs/utils/macroexpander.cpp index fc138974745..51a38f4f8c6 100644 --- a/src/libs/utils/macroexpander.cpp +++ b/src/libs/utils/macroexpander.cpp @@ -274,7 +274,10 @@ QString MacroExpander::expand(const QString &stringWithVariables) const FilePath MacroExpander::expand(const FilePath &fileNameWithVariables) const { // We want single variables to expand to fully qualified strings. - return FilePath::fromUserInput(expand(fileNameWithVariables.toString())); + const QString host = expand(fileNameWithVariables.host().toString()); + const QString scheme = expand(fileNameWithVariables.scheme().toString()); + const QString path = expand(fileNameWithVariables.path()); + return FilePath::fromParts(scheme, host, path); } QByteArray MacroExpander::expand(const QByteArray &stringWithVariables) const From 410b275ecaf00c2a6b131ae1a076510521aa148f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Thu, 14 Dec 2023 13:43:35 +0100 Subject: [PATCH 24/46] SquishTests: Attempt to stabilize designer test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The switch to cmake broke this test completely as qmake handles changes to ui files differently. Changing a ui file needs re-execution of moc which is not done automatically for cmake except when building. Beside this the cmake project manager seems to inform the code model about respective changes significantly later, if at all. So, we explicitly trigger a build now after changing the ui file and explicitly ensure the code model treats the file correctly by closing and re-opening it. Change-Id: Icb9cfb572c1442eff1bebc9c29fdee55155ca287 Reviewed-by: Robert Löhning --- .../tst_designer_autocomplete/test.py | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py index c77d4b5f180..32db7647a83 100644 --- a/tests/system/suite_tools/tst_designer_autocomplete/test.py +++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py @@ -3,6 +3,15 @@ source("../../shared/qtcreator.py") + +def closeMainWindowCppIfOpen(): + mainWindow = waitForObject(":Qt Creator_Core::Internal::MainWindow", 1000) + mainWindowCppClosed = lambda: "mainwindow.cpp " not in str(mainWindow.windowTitle) + if "mainwindow.cpp " in str(mainWindow.windowTitle): + invokeMenuItem('File', 'Close "mainwindow.cpp"') + waitFor(mainWindowCppClosed, 2000) + + def main(): startQC() if not startedWithoutPluginError(): @@ -15,11 +24,14 @@ def main(): earlyExit() return - invokeMenuItem('Build', 'Build Project "%s"' % projectName) + closeMainWindowCppIfOpen() selectFromLocator("mainwindow.ui") dragAndDrop(waitForObject("{container=':qdesigner_internal::WidgetBoxCategoryListView'" "text='Push Button' type='QModelIndex'}"), 5, 5, ":FormEditorStack_qdesigner_internal::FormWindow", 20, 50, Qt.CopyAction) + proposalExists = lambda: object.exists(':popupFrame_TextEditor::GenericProposalWidget') + fileNameCombo = waitForObject(":Qt Creator_FilenameQComboBox", 1000) + fileSaved = lambda: not str(fileNameCombo.currentText).endswith('*') for buttonName in [None, "aDifferentName", "anotherDifferentName", "pushButton"]: if buttonName: openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'" @@ -31,8 +43,13 @@ def main(): else: # Verify that everything works without ever changing the name buttonName = "pushButton" + invokeMenuItem("File", "Save All") + waitFor(fileSaved, 1000) + invokeMenuItem('Build', 'Build Project "%s"' % projectName) + waitForCompile() selectFromLocator("mainwindow.cpp") editor = waitForObject(":Qt Creator_CppEditor::Internal::CPPEditorWidget") + snooze(1) for tryDotOperator in [False, True]: if not placeCursorToLine(editor, "ui->setupUi(this);"): earlyExit("Maybe the project template changed.") @@ -42,21 +59,31 @@ def main(): if tryDotOperator: snooze(1) type(editor, ".") - waitFor("object.exists(':popupFrame_TextEditor::GenericProposalWidget')", 1500) else: type(editor, "-") snooze(1) type(editor, ">") + + if not test.verify(waitFor(proposalExists, 1500), "Proposal should be shown"): + type(editor, "") + continue + + proposalListView = waitForObject(':popupFrame_Proposal_QListView') + items = dumpItems(proposalListView.model()) + if test.verify(" %s" % buttonName in items, "Button present in proposal?"): + type(proposalListView, str(buttonName[0])) + else: + test.log(str(items)) snooze(1) - proposalExists = lambda: object.exists(':popupFrame_TextEditor::GenericProposalWidget') - nativeType("%s" % buttonName[0]) if test.verify(waitFor(proposalExists, 4000), "Verify that GenericProposalWidget is being shown."): - nativeType("") + type(proposalListView, "") lineCorrect = lambda: str(lineUnderCursor(editor)).strip() == "ui->%s" % buttonName test.verify(waitFor(lineCorrect, 1000), ('Comparing line "%s" to expected "%s"' % (lineUnderCursor(editor), "ui->%s" % buttonName))) - type(editor, "") # Delete line + type(editor, "") # Delete line + invokeMenuItem("File", "Save All") + closeMainWindowCppIfOpen() selectFromLocator("mainwindow.ui") - saveAndExit() + invokeMenuItem("File", "Exit") From e6dc3fb008c7cda07aa51a0f384f09a3dd87bebe Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 19 Jul 2024 12:50:59 +0200 Subject: [PATCH 25/46] QmlJS: Fix default command for qmlformat on Windows Fixes: QTCREATORBUG-31257 Change-Id: I72797f3e67e0b71dac434fcd90777b0aa7334995 Reviewed-by: Fabian Kosmale --- src/plugins/qmljseditor/qmljseditingsettingspage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp index c0e16b12887..3aa83bfe5b7 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp @@ -45,7 +45,7 @@ const char CUSTOM_COMMAND[] = "QmlJSEditor.useCustomFormatCommand"; const char CUSTOM_ANALYZER[] = "QmlJSEditor.useCustomAnalyzer"; const char DISABLED_MESSAGES[] = "QmlJSEditor.disabledMessages"; const char DISABLED_MESSAGES_NONQUICKUI[] = "QmlJSEditor.disabledMessagesNonQuickUI"; -const char DEFAULT_CUSTOM_FORMAT_COMMAND[] = "%{CurrentDocument:Project:QT_HOST_BINS}/qmlformat"; +const char DEFAULT_CUSTOM_FORMAT_COMMAND[] = "%{CurrentDocument:Project:QT_HOST_BINS}/qmlformat%{HostOs:ExecutableSuffix}"; using namespace QmlJSEditor::Internal; using namespace Utils; From 95ef7c8ff0bf3a61a26734edda7e17413a4b9a04 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 19 Jul 2024 13:58:51 +0200 Subject: [PATCH 26/46] Lua: Fix MinGW build for qbs Change-Id: Ia0afe744add081d8f255ad6328b6ae55ca07fc11 Reviewed-by: Christian Kandeler --- src/plugins/lua/lua.qbs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/lua/lua.qbs b/src/plugins/lua/lua.qbs index f9689e208f2..9c21feff048 100644 --- a/src/plugins/lua/lua.qbs +++ b/src/plugins/lua/lua.qbs @@ -9,6 +9,11 @@ QtcPlugin { Depends { name: "lua546" } Depends { name: "sol2" } + Properties { + condition: qbs.toolchain.contains("mingw") + cpp.optimization: "fast" + } + files: [ // "generateqtbindings.cpp", // use this if you need to generate some code "lua_global.h", From 945f0462f8729079d92b4abf8a31b02a511d70d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Thu, 2 May 2024 23:42:28 +0200 Subject: [PATCH 27/46] SquishTests: Wait until exactly one proposal is being shown ...so we don't accidentally use a wrong one. Change-Id: I4c08e11aab34b8649f40ba14385492b17e656385 Reviewed-by: Christian Stenger --- tests/system/suite_tools/tst_designer_autocomplete/test.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/system/suite_tools/tst_designer_autocomplete/test.py b/tests/system/suite_tools/tst_designer_autocomplete/test.py index 32db7647a83..1576e26e717 100644 --- a/tests/system/suite_tools/tst_designer_autocomplete/test.py +++ b/tests/system/suite_tools/tst_designer_autocomplete/test.py @@ -77,9 +77,12 @@ def main(): snooze(1) if test.verify(waitFor(proposalExists, 4000), "Verify that GenericProposalWidget is being shown."): + singleProposal = lambda: (object.exists(':popupFrame_Proposal_QListView') + and findObject(':popupFrame_Proposal_QListView').model().rowCount() == 1) + waitFor(singleProposal, 4000) type(proposalListView, "") lineCorrect = lambda: str(lineUnderCursor(editor)).strip() == "ui->%s" % buttonName - test.verify(waitFor(lineCorrect, 1000), + test.verify(waitFor(lineCorrect, 4000), ('Comparing line "%s" to expected "%s"' % (lineUnderCursor(editor), "ui->%s" % buttonName))) type(editor, "") # Delete line From b534aac6ab21073c7183bd0ee0e3a40da29517d9 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Wed, 17 Jul 2024 21:44:13 +0200 Subject: [PATCH 28/46] ExtensionManager: Make links clickable Change-Id: I9c98f9bf2e7e3baef42fa9d0d60012881418ef44 Reviewed-by: hjk --- src/plugins/extensionmanager/extensionmanagerwidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index 429d9a241f3..2ac839d98f0 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -423,6 +423,7 @@ ExtensionManagerWidget::ExtensionManagerWidget() m_linksTitle = sectionTitle(h6CapitalTF, Tr::tr("More information")); m_links = tfLabel(contentTF, false); m_links->setOpenExternalLinks(true); + m_links->setTextInteractionFlags(Qt::TextBrowserInteraction); m_imageTitle = sectionTitle(h6CapitalTF, {}); m_image = new QLabel; m_imageMovie.setDevice(&m_imageDataBuffer); From 0d2ae245806eeb462926eaa9ac2e61d8b2794357 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 19 Jul 2024 15:04:12 +0200 Subject: [PATCH 29/46] Haskell: Add wizard files to qbs build Change-Id: I5aa07fa430baa8b860e3ae540d8b0c1e1ce765c5 Reviewed-by: Christian Kandeler --- src/plugins/haskell/haskell.qbs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/plugins/haskell/haskell.qbs b/src/plugins/haskell/haskell.qbs index d1362f32b11..589d8004401 100644 --- a/src/plugins/haskell/haskell.qbs +++ b/src/plugins/haskell/haskell.qbs @@ -25,4 +25,17 @@ QtcPlugin { "haskelltokenizer.cpp", "haskelltokenizer.h", "stackbuildstep.cpp", "stackbuildstep.h" ] + + Qt.core.resourceFileBaseName: "HaskellWizards" // avoid conflicting qrc file + Group { + name: "Wizard files" + Qt.core.resourceSourceBase: sourceDirectory + Qt.core.resourcePrefix: "haskell/" + fileTags: "qt.core.resource_data" + prefix: "share/wizards/" + files: [ + "module/file.hs", + "module/wizard.json", + ] + } } From 0de1a6cdf726d3f0a59bcecdf19fb8a3898890e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 19 Jul 2024 23:14:36 +0200 Subject: [PATCH 30/46] SquishTests: Don't expect qmake in tst_default_settings When qmake is not present in PATH or not usable, Creator does not add a Qt version and does not write qtversion.xml. Expect this behavior in the test. Change-Id: I0890b9a22bdec47c0ac7206ba0a83d1e3ded2bb3 Reviewed-by: Christian Stenger --- .../suite_general/tst_default_settings/test.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py index 194a8ac4ccf..c001763c297 100644 --- a/tests/system/suite_general/tst_default_settings/test.py +++ b/tests/system/suite_general/tst_default_settings/test.py @@ -16,10 +16,10 @@ def main(): if not startedWithoutPluginError(): return invokeMenuItem("Edit", "Preferences...") - __checkKits__() + qmakeFound = __checkKits__() clickButton(waitForObject(":Options.Cancel_QPushButton")) invokeMenuItem("File", "Exit") - __checkCreatedSettings__(emptySettings) + __checkCreatedSettings__(emptySettings, qmakeFound) def __createMinimumIni__(emptyParent): qtProjDir = os.path.join(emptyParent, "QtProject") @@ -61,6 +61,10 @@ def __checkKits__(): test.log(str(genericDebuggers)) # check Qt versions qmakePath = which("qmake") + if qmakePath and (not "Using Qt version" in + getOutputFromCmdline([qmakePath, "--version"], acceptedError=1)): + # ignore dysfunctional qmake, e.g. incomplete qtchooser + qmakePath = None foundQt = [] clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Qt Versions") __iterateTree__(":qtdirList_QTreeView", __qtFunc__, foundQt, qmakePath) @@ -71,6 +75,7 @@ def __checkKits__(): # check kits clickOnTab(":Options.qt_tabwidget_tabbar_QTabBar", "Kits") __iterateTree__(":BuildAndRun_QTreeView", __kitFunc__, foundQt, foundCompilerNames) + return qmakePath != None def __processSubItems__(treeObjStr, section, parModelIndexStr, doneItems, additionalFunc, *additionalParameters): @@ -377,7 +382,7 @@ def __lowerStrs__(iterable): else: yield it -def __checkCreatedSettings__(settingsFolder): +def __checkCreatedSettings__(settingsFolder, qmakeFound): waitForCleanShutdown() qtProj = os.path.join(settingsFolder, "QtProject") creatorFolder = os.path.join(qtProj, "qtcreator") @@ -390,8 +395,9 @@ def __checkCreatedSettings__(settingsFolder): os.path.join(creatorFolder, "devices.xml"):0, os.path.join(creatorFolder, "helpcollection.qhc"):0, os.path.join(creatorFolder, "profiles.xml"):0, - os.path.join(creatorFolder, "qtversion.xml"):0, os.path.join(creatorFolder, "toolchains.xml"):0} + if qmakeFound: + files[os.path.join(creatorFolder, "qtversion.xml")] = 0 for f in folders: test.verify(os.path.isdir(f), "Verifying whether folder '%s' has been created." % os.path.basename(f)) From ec735c3a2a13a638b7f651eccf30ae8588a84a48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Fri, 19 Jul 2024 22:22:28 +0200 Subject: [PATCH 31/46] SquishTests: Fix tst_rename_file for case ignoring file systems On Linux, Creator only considers files with the exact extension ".qml" QML files and places them under a "QML" node in the project tree. On Mac and Windows, Creator also places files with extension ".QML" there. Change-Id: Id81989e867fa946081ea7a350b208ddfe09e5460 Reviewed-by: Jukka Nokso Reviewed-by: Christian Stenger --- tests/system/suite_general/tst_rename_file/test.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/tests/system/suite_general/tst_rename_file/test.py b/tests/system/suite_general/tst_rename_file/test.py index d2abe87ea2b..aebd7e5fd79 100644 --- a/tests/system/suite_general/tst_rename_file/test.py +++ b/tests/system/suite_general/tst_rename_file/test.py @@ -38,7 +38,7 @@ def main(): previous = filenames[-1] for filename in filenames: tempFiletype = filetype - if filetype == "QML" and not previous.endswith(".qml"): + if filetype == "QML" and not fileExtMatchesQml(previous): tempFiletype = "Other files" renameFile(templateDir, usedProFile, projectName + "." + tempFiletype, previous, filename) @@ -61,6 +61,15 @@ def verifyRenamedIncludes(templateDir, file, oldname, newname): 'Verify that new filename is included in %s' % file)): test.log(grep("include", fileText)) + +def fileExtMatchesQml(fileName): + if platform.system() == "Linux": + return fileName.endswith(".qml") + else: + # On case ignoring file systems, ".QML" is the same as ".qml" + return fileName.lower().endswith(".qml") + + def renameFile(projectDir, proFile, branch, oldname, newname): oldFilePath = os.path.join(projectDir, oldname) newFilePath = os.path.join(projectDir, newname) @@ -115,7 +124,7 @@ def renameFile(projectDir, proFile, branch, oldname, newname): test.verify(oldname not in os.listdir(projectDir), "Verify that file with old name does not exist: %s" % oldFilePath) - if newItemText.endswith("\\.qml"): + if fileExtMatchesQml(newItemText): newItemText = newItemText.replace(".Other files.", ".QML.") else: newItemText = newItemText.replace(".QML.", ".Other files.") From e9856ad138737c20946f965bfa420dcb8ad11541 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 10:00:44 +0200 Subject: [PATCH 32/46] Update change log Change-Id: I055bfba24ea4610540dab930a30a998acba1b25e Reviewed-by: Leena Miettinen --- dist/changelog/changes-14.0.0.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dist/changelog/changes-14.0.0.md b/dist/changelog/changes-14.0.0.md index 3625940c757..bd4a54d9310 100644 --- a/dist/changelog/changes-14.0.0.md +++ b/dist/changelog/changes-14.0.0.md @@ -17,6 +17,8 @@ General ([Documentation](https://doc-snapshots.qt.io/qtcreator-extending/lua-extensions.html)) * Added a mode for managing extensions * Added `Clear` and `Save Contents` to context menus of all output views +* Fixed the tab focus order in the search toolbar + ([QTCREATORBUG-30791](https://bugreports.qt.io/browse/QTCREATORBUG-30791)) * Locator * Added the option to show results relative to project root ([QTCREATORBUG-29462](https://bugreports.qt.io/browse/QTCREATORBUG-29462)) @@ -46,6 +48,14 @@ Editing ([QTCREATORBUG-31116](https://bugreports.qt.io/browse/QTCREATORBUG-31116)) * Fixed the unindenting with backspace when multiple cursors are active ([QTCREATORBUG-31158](https://bugreports.qt.io/browse/QTCREATORBUG-31158)) +* Fixed the `Save` shortcut after closing a document while the document's + drop-down menu is shown + ([QTCREATORBUG-31205](https://bugreports.qt.io/browse/QTCREATORBUG-31205)) +* Fixed the highlighting of matches for `Whole Words Only` searches + ([QTCREATORBUG-31020](https://bugreports.qt.io/browse/QTCREATORBUG-31020)) +* Fixed that the documents chooser did not close when releasing `Ctrl` in + some setups + ([QTCREATORBUG-31228](https://bugreports.qt.io/browse/QTCREATORBUG-31228)) ### C++ @@ -79,6 +89,9 @@ Editing ([QTCREATORBUG-29943](https://bugreports.qt.io/browse/QTCREATORBUG-29943)) * Fixed the handling of system headers ([QTCREATORBUG-30474](https://bugreports.qt.io/browse/QTCREATORBUG-30474)) + * Fixed a warning when adding an empty session to the list of sessions with + a single Clangd instance + ([QTCREATORBUG-31186](https://bugreports.qt.io/browse/QTCREATORBUG-31186)) * Built-in * Added the `Enable indexing` option in `Preferences` > `C++` > `Code Model` to turn off the built-in indexer @@ -101,6 +114,8 @@ Editing ([Documentation](https://doc.qt.io/qtcreator/creator-quick-ui-forms.html)) * Fixed that the color preview did not work on named colors ([QTCREATORBUG-30594](https://bugreports.qt.io/browse/QTCREATORBUG-30594)) +* Fixed the default path to `qmlformat` on Windows + ([QTCREATORBUG-31257](https://bugreports.qt.io/browse/QTCREATORBUG-31257)) * Language Server * Switched on by default for Qt 6.8 and later * Added an option for generating `qmlls.ini` files for CMake projects in @@ -206,6 +221,8 @@ Projects ([QTCREATORBUG-30836](https://bugreports.qt.io/browse/QTCREATORBUG-30836)) * Added support for custom build types ([QTCREATORBUG-30014](https://bugreports.qt.io/browse/QTCREATORBUG-30014)) + * Fixed issues with cross-compilation setups + ([QTCREATORBUG-31249](https://bugreports.qt.io/browse/QTCREATORBUG-31249)) ([Documentation](https://doc-snapshots.qt.io/qtcreator-14.0/creator-build-settings-cmake-presets.html)) @@ -317,6 +334,9 @@ Platforms * Improved the performance of the generic deployment method * Fixed that the file size check that is performed before parsing C++ files could freeze Qt Creator until finished for remote projects +* Fixed that the deployment of a directory deployed only its contents instead + of the directory itself + ([QTCREATORBUG-31136](https://bugreports.qt.io/browse/QTCREATORBUG-31136)) ### Qt Application Manager @@ -333,8 +353,9 @@ Ahmad Samir Aleksei German Alessandro Portale Alexander Drozdov +Alexandre Laurent Ali Kianian -Andre Hartmann +André Hartmann André Pönitz Artem Sokolovskii Assam Boudjelthia @@ -364,6 +385,7 @@ Mats Honkamaa Michael Weghorn Miikka Heikkinen Orgad Shaneh +Pino Toscano Pranta Dastider Ralf Habacker Robert Löhning From da9b4803e738f3bee68528a98a7741208dcc3b34 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 10:41:59 +0200 Subject: [PATCH 33/46] German translation: Sync a string between ProjectExplorer and TextEditor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I833c58d0fbc3ad5565ee1c6346a9b0bd0bf13cbd Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 65c29af732a..5bbf667de42 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -55010,7 +55010,7 @@ Drücken Sie zusätzlich die Umschalttaste, wird ein Escape-Zeichen an der aktue Documentation Comments - Kommentare für Dokumentation + Dokumentationskommentare Automatically creates a Doxygen comment upon pressing enter after a '/**', '/*!', '//!' or '///'. From d513663828e4ff34a94f2adde547d49ed0bd9ca5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 10:53:00 +0200 Subject: [PATCH 34/46] German translation: Unify to feature -> Funktion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I298c9eb2edeb4dc36dc4fe774fb4d3cf2a872032 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 5bbf667de42..2c4dd15015a 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -7811,7 +7811,7 @@ Please check the output pane for more information. Also warns in the code editor about QML features that are not properly supported by the Qt Quick Designer. - Zeigt auch im Code-Editor eine Warnung bei QML-Features an, die vom Qt Quick Designer nicht vollständig unterstützt werden. + Zeigt auch im Code-Editor eine Warnung bei QML-Funktionen an, die vom Qt Quick Designer nicht vollständig unterstützt werden. Internationalization @@ -10927,7 +10927,7 @@ Dies kann nicht rückgängig gemacht werden. The device has to be connected with ADB debugging enabled to use this feature. - Das Gerät muss mit aktiviertem ADB-Debuggen angeschlossen sein, um diese Funktionalität nutzen zu können. + Das Gerät muss mit aktiviertem ADB-Debuggen angeschlossen sein, um diese Funktion nutzen zu können. Opening connection port %1 failed. @@ -11088,7 +11088,7 @@ Dies kann nicht rückgängig gemacht werden. Include default features for Qt modules. - Standard-Features für Qt-Module einschließen. + Standardfunktionen für Qt-Module einschließen. Add @@ -25744,7 +25744,7 @@ markers in the source code editor. <html><head/><body><p>Enables stepping backwards.</p><p><b>Note:</b> This feature is very slow and unstable on the GDB side. It exhibits unpredictable behavior when going backwards over system calls and is very likely to destroy your debugging session.</p></body></html> - <html><head/><body><p>Rückwärts-Debuggen aktivieren.</p><p><b>Hinweis:</b> Diese Funktionalität ist sehr langsam und instabil innerhalb von GDB. Es kann unvorhergesehenes Verhalten auftreten, wenn man rückwärts über einen Systemaufruf springt, und die Debugger-Sitzung kann leicht zerstört werden.</p></body></html> + <html><head/><body><p>Rückwärts-Debuggen aktivieren.</p><p><b>Hinweis:</b> Diese Funktion ist sehr langsam und instabil innerhalb von GDB. Es kann unvorhergesehenes Verhalten auftreten, wenn man rückwärts über einen Systemaufruf springt, und die Debugger-Sitzung kann leicht zerstört werden.</p></body></html> Debug all child processes @@ -28125,7 +28125,7 @@ Bitte wählen Sie einen 64-bit-Debugger in den Kit-Einstellungen für dieses Kit This feature is very slow and unstable on the GDB side. It exhibits unpredictable behavior when going backwards over system calls and is very likely to destroy your debugging session. - Diese Funktionalität ist sehr langsam und instabil innerhalb von GDB. Es kann unvorhergesehenes Verhalten auftreten, wenn man rückwärts über einen Systemaufruf springt, und die Debugger-Sitzung kann leicht unbenutzbar werden. + Diese Funktion ist sehr langsam und instabil innerhalb von GDB. Es kann unvorhergesehenes Verhalten auftreten, wenn man rückwärts über einen Systemaufruf springt, und die Debugger-Sitzung kann leicht unbenutzbar werden. Reverse Direction @@ -30618,7 +30618,7 @@ zu deaktivieren, deaktiviert auch die folgenden Plugins: Does not interpret key sequences like Ctrl-S in FakeVim but handles them as regular shortcuts. This gives easier access to core functionality at the price of losing some features of FakeVim. - Tastensequenzen wie Strg-S nicht in FakeVim verarbeiten, sondern sie als gewöhnliche Tastenkombinationen behandeln. Dies erleichtert den Zugriff auf die Kernfunktionalität auf Kosten eingeschränkter Funktionalität von FakeVim. + Tastensequenzen wie Strg-S nicht in FakeVim verarbeiten, sondern sie als gewöhnliche Tastenkombinationen behandeln. Dies erleichtert den Zugriff auf die Kernfunktionalität auf Kosten eingeschränkter Funktion von FakeVim. Does not interpret some key presses in insert mode so that code can be properly completed and expanded. @@ -43192,7 +43192,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen. At least one required feature is not present. - Mindestens ein benötigtes Feature ist nicht vorhanden. + Mindestens eine benötigte Funktion ist nicht vorhanden. Platform is not supported. @@ -43200,7 +43200,7 @@ Sie sollten nicht mehrere Test-Frameworks im selben Projekt mischen. At least one preferred feature is not present. - Mindestens ein bevorzugtes Feature ist nicht vorhanden. + Mindestens eine bevorzugte Funktion ist nicht vorhanden. Feature list is set and not of type list. From e2d0ec02fea52ac45a959da40fe414cfffbaf474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20L=C3=B6hning?= Date: Mon, 22 Jul 2024 10:09:41 +0200 Subject: [PATCH 35/46] SquishTests: Don't expect Creator to detect 32 bit cdbs It stopped using them in Version 14. Change-Id: I81c481d48474ae6024187b876720026ed668575c Reviewed-by: Christian Stenger --- tests/system/suite_general/tst_default_settings/test.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/tests/system/suite_general/tst_default_settings/test.py b/tests/system/suite_general/tst_default_settings/test.py index c001763c297..0d64d887018 100644 --- a/tests/system/suite_general/tst_default_settings/test.py +++ b/tests/system/suite_general/tst_default_settings/test.py @@ -300,18 +300,11 @@ def __getExpectedDebuggers__(): def __getCDB__(): result = [] possibleLocations = ["C:\\Program Files\\Debugging Tools for Windows (x64)", - "C:\\Program Files (x86)\\Debugging Tools for Windows (x86)", - "C:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x86", "C:\\Program Files (x86)\\Windows Kits\\8.0\\Debuggers\\x64", - "C:\\Program Files\\Windows Kits\\8.0\\Debuggers\\x86", "C:\\Program Files\\Windows Kits\\8.0\\Debuggers\\x64", - "C:\\Program Files (x86)\\Windows Kits\\8.1\\Debuggers\\x86", "C:\\Program Files (x86)\\Windows Kits\\8.1\\Debuggers\\x64", - "C:\\Program Files\\Windows Kits\\8.1\\Debuggers\\x86", "C:\\Program Files\\Windows Kits\\8.1\\Debuggers\\x64", - "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86", "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64", - "C:\\Program Files\\Windows Kits\\10\\Debuggers\\x86", "C:\\Program Files\\Windows Kits\\10\\Debuggers\\x64"] for cdbPath in possibleLocations: cdb = os.path.join(cdbPath, "cdb.exe") From bec20925d00449f7af7c6e19ca33fb6e866da8df Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 10:56:09 +0200 Subject: [PATCH 36/46] German translation: Unify to built-in -> integriert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I88c06f2aa9ea7d6c524e7825087bdb1929e5941f Reviewed-by: Christian Stenger Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 2c4dd15015a..4586ab183e2 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -16965,7 +16965,7 @@ Stellen Sie sicher, dass der Wert der CMAKE_BUILD_TYPE-Variable derselbe wie der With clangd enabled, Qt Creator fully supports modern C++ when highlighting code, completing symbols and so on.<br>This comes at a higher cost in terms of CPU load and memory usage compared to the built-in code model, which therefore might be the better choice on older machines and/or with legacy code.<br>You can enable/disable and fine-tune clangd <a href="dummy">here</a>. - Wenn Clangd aktiviert ist, unterstützt Qt Creator semantische Hervorhebung, Symbolvervollständigung und so weiter für Code, der modernes C++ nutzt.<br/>Das wirkt sich nachteilig auf CPU-Last und Speicherverbrauch im Vergleich zum eingebauten Codemodell aus, das deshalb eine bessere Wahl für ältere Maschinen und/oder für Legacy Code sein kann.<br/>Sie können Clangd <a href="dummy">hier</a> aktivieren/deaktivieren und anpassen. + Wenn Clangd aktiviert ist, unterstützt Qt Creator semantische Hervorhebung, Symbolvervollständigung und so weiter für Code, der modernes C++ nutzt.<br/>Das wirkt sich nachteilig auf CPU-Last und Speicherverbrauch im Vergleich zum integrierten Codemodell aus, das deshalb eine bessere Wahl für ältere Maschinen und/oder für Legacy Code sein kann.<br/>Sie können Clangd <a href="dummy">hier</a> aktivieren/deaktivieren und anpassen. Enable Anyway @@ -53595,7 +53595,7 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun %1 [built-in] - %1 [eingebaut] + %1 [integriert] %1 [customizable] @@ -53804,7 +53804,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. Enable built-in camel case &navigation - Eingebaute CamelCase-&Navigation aktivieren + Integrierte CamelCase-&Navigation aktivieren On Mouseover From d41015539516c7c64a06d9f79eca9eae8f8b6885 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 14:54:35 +0200 Subject: [PATCH 37/46] QmlDesigner: Fix context help in code editor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context help is only triggered for the first widget in the focus widget's parent hierarchy that has an IContext registered. This change amends 411100b0378202dc617acaa236f4730eb4cc43b2 which removed the TextEditorActionHandler by registering an editor-specific IContext for the individual TextEditorWidgets. The code editor in QmlDesigner registered an IContext for a widget that _contains_ the actual editor widget and handled context help there. Now the editor widget has an IContext, which means that the IContext that QmlDesigner registered was never asked. Directly register the QmlDesigner IContext for the text editor widget itself, so it takes part in context help resolution. Fixes: QDS-13248 Change-Id: Ib49129d9de20bdfa022a8e75ba454c7674040699 Reviewed-by: Henning Gründl --- .../qmldesigner/components/texteditor/texteditorview.cpp | 7 ++++--- .../qmldesigner/components/texteditor/texteditorview.h | 2 +- src/plugins/qmldesigner/designmodecontext.cpp | 8 ++++---- src/plugins/qmldesigner/designmodecontext.h | 8 +++++++- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp index 2e52b3358ba..254cfd0bea3 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.cpp @@ -48,10 +48,7 @@ const char TEXTEDITOR_CONTEXT_ID[] = "QmlDesigner.TextEditorContext"; TextEditorView::TextEditorView(ExternalDependenciesInterface &externalDependencies) : AbstractView{externalDependencies} , m_widget(new TextEditorWidget(this)) - , m_textEditorContext(new Internal::TextEditorContext(m_widget)) { - Core::ICore::addContextObject(m_textEditorContext); - Core::Context context(TEXTEDITOR_CONTEXT_ID); /* @@ -87,7 +84,11 @@ void TextEditorView::modelAttached(Model *model) // Set the context of the text editor, but we add another special context to override shortcuts. Core::Context context = textEditor->context(); context.prepend(TEXTEDITOR_CONTEXT_ID); + + m_textEditorContext = new Internal::TextEditorContext(m_widget); + m_textEditorContext->setWidget(textEditor->widget()); // toplevel focus widget of the editor m_textEditorContext->setContext(context); + Core::ICore::addContextObject(m_textEditorContext); m_widget->setTextEditor(std::move(textEditor)); } diff --git a/src/plugins/qmldesigner/components/texteditor/texteditorview.h b/src/plugins/qmldesigner/components/texteditor/texteditorview.h index 33a5ec8276c..35a33863fab 100644 --- a/src/plugins/qmldesigner/components/texteditor/texteditorview.h +++ b/src/plugins/qmldesigner/components/texteditor/texteditorview.h @@ -85,7 +85,7 @@ public: private: QPointer m_widget; - Internal::TextEditorContext *m_textEditorContext; + Internal::TextEditorContext *m_textEditorContext = nullptr; bool m_errorState = false; }; diff --git a/src/plugins/qmldesigner/designmodecontext.cpp b/src/plugins/qmldesigner/designmodecontext.cpp index 796261935af..2d73a01839b 100644 --- a/src/plugins/qmldesigner/designmodecontext.cpp +++ b/src/plugins/qmldesigner/designmodecontext.cpp @@ -85,16 +85,16 @@ void NavigatorContext::contextHelp(const HelpCallback &callback) const qobject_cast(m_widget)->contextHelp(callback); } -TextEditorContext::TextEditorContext(QWidget *widget) - : IContext(widget) +TextEditorContext::TextEditorContext(TextEditorWidget *parent) + : IContext(parent) + , m_parent(parent) { - setWidget(widget); setContext(Core::Context(Constants::C_QMLTEXTEDITOR, Constants::C_QT_QUICK_TOOLS_MENU)); } void TextEditorContext::contextHelp(const HelpCallback &callback) const { - qobject_cast(m_widget)->contextHelp(callback); + m_parent->contextHelp(callback); } } // namespace QmlDesigner::Internal diff --git a/src/plugins/qmldesigner/designmodecontext.h b/src/plugins/qmldesigner/designmodecontext.h index 1d146deb7d8..1ad7dded453 100644 --- a/src/plugins/qmldesigner/designmodecontext.h +++ b/src/plugins/qmldesigner/designmodecontext.h @@ -6,6 +6,9 @@ #include namespace QmlDesigner { + +class TextEditorWidget; + namespace Internal { /** @@ -70,8 +73,11 @@ class TextEditorContext : public Core::IContext Q_OBJECT public: - TextEditorContext(QWidget *widget); + TextEditorContext(TextEditorWidget *parent); void contextHelp(const Core::IContext::HelpCallback &callback) const override; + +private: + TextEditorWidget *m_parent = nullptr; }; } // namespace Internal } // namespace QmlDesigner From eee3fc69070355d50f2223d49a0bcbe5137d11c1 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Sun, 21 Jul 2024 13:59:07 +0200 Subject: [PATCH 38/46] ClangFormat: explicitly link with LLVM The ClangFormat plugin uses the LLVM API explicitly, so explicitly link with the LLVM library when available, using its cmake target. This way the linking is done no matter whether the target for the clang format library declares LLVM as its public dependency. Change-Id: I997c720935750fd01229d4d4c20c1bdcadca9ac7 Reviewed-by: Cristian Adam --- src/plugins/clangformat/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/clangformat/CMakeLists.txt b/src/plugins/clangformat/CMakeLists.txt index 30bc50dd2c3..6873e690a14 100644 --- a/src/plugins/clangformat/CMakeLists.txt +++ b/src/plugins/clangformat/CMakeLists.txt @@ -37,3 +37,8 @@ extend_qtc_plugin(ClangFormat DEFINES TESTDATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/tests/data" ) + +extend_qtc_plugin(ClangFormat + CONDITION TARGET LLVM + DEPENDS LLVM +) From 931f55200b60260060ad59c9860d5fff965849eb Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Mon, 22 Jul 2024 15:27:34 +0200 Subject: [PATCH 39/46] ExtensionManager: Keep "Load on Start" checkbox up to date If a plugin was selected in the ExtensionManager, and meanwhile, the "load" status of that plugin was changed via the plugin dialog, the change was not reflected in the ExtensionManager. This change connects the "Load on Start" checkbox in the ExtensionManager with the PluginManager's "changed" signal to keep the state in sync. Fixes: QTCREATORBUG-31177 Change-Id: I6946e23e8491e9c896026b55315acf76bb50cb92 Reviewed-by: Cristian Adam --- src/plugins/extensionmanager/extensionmanagerwidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index 2ac839d98f0..9ce803e6f02 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -279,6 +279,8 @@ public: } }); + connect(ExtensionSystem::PluginManager::instance(), + &ExtensionSystem::PluginManager::pluginsChanged, this, &PluginStatusWidget::update); connect(m_restartButton, &QAbstractButton::clicked, ICore::instance(), &ICore::restart, Qt::QueuedConnection); From 7b4b1e2a7270232bde6477c248a27aa3d8dc80ad Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 23 Jul 2024 09:02:52 +0200 Subject: [PATCH 40/46] Debugger: Fix debugger type detection of Android NDK LLDBs NDKs usually ship the python libraries required by the NDKs LLDB. However, these libraries reside in a different location. DebuggerItem::addAndroidLldbPythonEnv takes care of finding that location. This change re-adds the recently remopved DebuggerItem::addAndroidLldbPythonEnv call, so that LLDB can again be detected. Amends: b56a447a83abf19126764549c4908b8ffedc0375 Fixes: QTCREATORBUG-31279 Change-Id: I78cb7dfd1abd96f7bc52e4adff9dddd054f8ac0b Reviewed-by: Cristian Adam --- src/plugins/debugger/debuggeritem.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/debugger/debuggeritem.cpp b/src/plugins/debugger/debuggeritem.cpp index 9cd855c148e..120684c9fe4 100644 --- a/src/plugins/debugger/debuggeritem.cpp +++ b/src/plugins/debugger/debuggeritem.cpp @@ -146,6 +146,7 @@ void DebuggerItem::reinitializeFromFile(QString *error, Utils::Environment *cust } Environment env = customEnv ? *customEnv : m_command.deviceEnvironment(); + DebuggerItem::addAndroidLldbPythonEnv(m_command, env); // QNX gdb unconditionally checks whether the QNX_TARGET env variable is // set and bails otherwise, even when it is not used by the specific From 370c2d7787ec291565f4749e370fdecea77d12b1 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 23 Jul 2024 09:52:12 +0200 Subject: [PATCH 41/46] Debugger: Fix snapshot handling Avoid sharing the workers with the engine creating the snapshot to avoid closing both when stopping the debugger engine for the snapshot. Correctly detach at finish to avoid having a runcontrol appearing still running. Fixes: QTCREATORBUG-31220 Change-Id: Iccb54b0fc2d7f5bf54b42a116e56c1a840b1f46e Reviewed-by: hjk --- src/plugins/debugger/debuggerruncontrol.cpp | 2 ++ src/plugins/projectexplorer/runcontrol.cpp | 6 ++++++ src/plugins/projectexplorer/runcontrol.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp index 007d3464bb8..f4f1405953e 100644 --- a/src/plugins/debugger/debuggerruncontrol.cpp +++ b/src/plugins/debugger/debuggerruncontrol.cpp @@ -575,9 +575,11 @@ void DebuggerRunTool::start() connect(engine, &DebuggerEngine::attachToCoreRequested, this, [this](const QString &coreFile) { auto rc = new RunControl(ProjectExplorer::Constants::DEBUG_RUN_MODE); rc->copyDataFromRunControl(runControl()); + rc->resetDataForAttachToCore(); auto name = QString(Tr::tr("%1 - Snapshot %2").arg(runControl()->displayName()).arg(++d->snapshotCounter)); auto debugger = new DebuggerRunTool(rc); debugger->setStartMode(AttachToCore); + debugger->setCloseMode(DetachAtClose); debugger->setRunControlName(name); debugger->setCoreFilePath(FilePath::fromString(coreFile), true); debugger->startRunControl(); diff --git a/src/plugins/projectexplorer/runcontrol.cpp b/src/plugins/projectexplorer/runcontrol.cpp index 5eac3498bcf..4dd364aaf0a 100644 --- a/src/plugins/projectexplorer/runcontrol.cpp +++ b/src/plugins/projectexplorer/runcontrol.cpp @@ -364,6 +364,12 @@ void RunControl::copyDataFromRunControl(RunControl *runControl) d->copyData(runControl->d.get()); } +void RunControl::resetDataForAttachToCore() +{ + d->m_workers.clear(); + d->state = RunControlState::Initialized; +} + void RunControl::copyDataFromRunConfiguration(RunConfiguration *runConfig) { QTC_ASSERT(runConfig, return); diff --git a/src/plugins/projectexplorer/runcontrol.h b/src/plugins/projectexplorer/runcontrol.h index 94288664361..b99439869ac 100644 --- a/src/plugins/projectexplorer/runcontrol.h +++ b/src/plugins/projectexplorer/runcontrol.h @@ -150,6 +150,7 @@ public: void copyDataFromRunConfiguration(RunConfiguration *runConfig); void copyDataFromRunControl(RunControl *runControl); + void resetDataForAttachToCore(); void setAutoDeleteOnStop(bool autoDelete); From c9da771625f68c27149a477b58bc2baf8841914f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 23 Jul 2024 10:47:04 +0200 Subject: [PATCH 42/46] QmlJS: Fix requesting context help Import versions as well as versionless imports can confuse the help engine when performing context help lookups, which leads in some cases to falling back to the wrong help items. Remove the version for looking up help items. Fixes: QTCREATORBUG-31280 Change-Id: Ida765369f52804186ca005ceec23cd9d795220c5 Reviewed-by: Fabian Kosmale Reviewed-by: Semih Yavuz --- src/plugins/qmljseditor/qmljshoverhandler.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index 650592ff485..bdaad5b153a 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -123,12 +123,15 @@ static inline QString getModuleName(const ScopeChain &scopeChain, const Document bool QmlJSHoverHandler::setQmlTypeHelp(const ScopeChain &scopeChain, const Document::Ptr &qmlDocument, const ObjectValue *value, const QStringList &qName) { - QString moduleName = getModuleName(scopeChain, qmlDocument, value); + const QString moduleName = getModuleName(scopeChain, qmlDocument, value); + static const QRegularExpression anyVersion("((-1|\\d+)\\.-1)|(\\d+\\.\\d+)$"); QStringList helpIdCandidates; QStringList helpIdPieces(qName); - helpIdPieces.prepend(moduleName); + QString strippedModuleName = moduleName; + strippedModuleName.remove(anyVersion); + helpIdPieces.prepend(strippedModuleName); helpIdPieces.prepend("QML"); helpIdCandidates += helpIdPieces.join('.'); @@ -151,8 +154,8 @@ bool QmlJSHoverHandler::setQmlTypeHelp(const ScopeChain &scopeChain, const Docum const HelpItem::Links links = helpItem.links(); // Check if the module name contains a major version. - QRegularExpression version("^([^\\d]*)(\\d+)\\.*\\d*$"); - QRegularExpressionMatch m = version.match(moduleName); + static QRegularExpression version("^([^\\d]*)(\\d+)\\.*\\d*$"); + const QRegularExpressionMatch m = version.match(moduleName); if (m.hasMatch()) { QMap filteredUrlMap; const QString maj = m.captured(2); From 2b2746c274e8f3d7f45314608129736dc642a180 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 11:24:40 +0200 Subject: [PATCH 43/46] =?UTF-8?q?German=20translation:=20Unify=20"remove"?= =?UTF-8?q?=20->=20"entfernen"=20vs=20"l=C3=B6schen"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unfortunately we are not very consistent with "remove" versus "delete" in English either. Anyway, default the translation of "remove" to "entfernen" (like for breakpoints etc), except where it obviously refers to deleting files where we use "löschen". Change-Id: I4898fe4c85fe0372d6cd314dd71e9583f8084480 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 68 ++++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 4586ab183e2..4c9a0280440 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -13902,11 +13902,11 @@ Wollen Sie "%1" mit der Standardanwendung öffnen? Remove Server Configuration - Server-Konfiguration löschen + Server-Konfiguration entfernen Remove the server configuration "%1"? - Server-Konfiguration "%1" löschen? + Server-Konfiguration "%1" entfernen? Add Dashboard Configuration @@ -19943,7 +19943,7 @@ konnte nicht unter Versionsverwaltung (%2) gestellt werden Remove tool. - Werkzeug löschen. + Werkzeug entfernen. Revert tool to default. @@ -27279,7 +27279,7 @@ Soll es erneut versucht werden? Remove - Löschen + Entfernen Source Paths Mapping @@ -28667,11 +28667,11 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl Remove All Breakpoints - Alle Haltepunkte löschen + Alle Haltepunkte entfernen Are you sure you want to remove all breakpoints from all files in the current session? - Möchten Sie wirklich alle Haltepunkte aus allen Dateien der aktuellen Sitzung löschen? + Möchten Sie wirklich alle Haltepunkte aus allen Dateien der aktuellen Sitzung entfernen? Perspective @@ -36093,7 +36093,7 @@ Für gültige Einstellungen schauen Sie in die Dokumentation des verwendeten Lan Remove - Löschen + Entfernen Macros @@ -38919,11 +38919,11 @@ Außer: %2 Cancel Build && Remove Build Configuration - Build abbrechen und Build-Konfiguration löschen + Build abbrechen und Build-Konfiguration entfernen Remove Build Configuration %1? - Build-Konfiguration %1 löschen? + Build-Konfiguration %1 entfernen? The build configuration <b>%1</b> is currently being built. @@ -38931,11 +38931,11 @@ Außer: %2 Do you want to cancel the build process and remove the Build Configuration anyway? - Möchten Sie die Erstellung abbrechen und die Build-Konfiguration trotzdem löschen? + Möchten Sie die Build-Konfiguration trotzdem entfernen und die Erstellung abbrechen? Remove Build Configuration? - Build-Konfiguration löschen? + Build-Konfiguration entfernen? Do you really want to delete build configuration <b>%1</b>? @@ -39189,7 +39189,7 @@ konnte dem Projekt "%2" nicht hinzugefügt werden. Remove Run Configuration? - Aktive Ausführungskonfiguration löschen? + Aktive Ausführungskonfiguration entfernen? Do you really want to delete the run configuration <b>%1</b>? @@ -39220,7 +39220,7 @@ Title of a the cloned RunConfiguration window, text of the window Remove Run Configurations? - Ausführungskonfiguration löschen? + Ausführungskonfigurationen entfernen? Do you really want to delete all run configurations? @@ -39232,11 +39232,11 @@ Title of a the cloned RunConfiguration window, text of the window Cancel Build && Remove Deploy Configuration - Build abbrechen und Deployment-Konfiguration löschen + Build abbrechen und Deployment-Konfiguration entfernen Remove Deploy Configuration %1? - Deployment-Konfiguration %1 löschen? + Deployment-Konfiguration %1 entfernen? The deploy configuration <b>%1</b> is currently being built. @@ -39244,11 +39244,11 @@ Title of a the cloned RunConfiguration window, text of the window Do you want to cancel the build process and remove the Deploy Configuration anyway? - Möchten Sie die Erstellung abbrechen und die Deployment-Konfiguration trotzdem löschen? + Möchten Sie die Deployment-Konfiguration trotzdem entfernen und die Erstellung abbrechen? Remove Deploy Configuration? - Deployment-Konfiguration löschen? + Deployment-Konfiguration entfernen? Do you really want to delete deploy configuration <b>%1</b>? @@ -39906,7 +39906,7 @@ Bitte versuchen Sie es erneut. Run Configuration Removed - Ausführungskonfiguration gelöscht + Ausführungskonfiguration entfernt The configuration that was supposed to run is no longer available. @@ -40356,7 +40356,7 @@ The name of the build configuration created by default for a generic project. Remove Item - Element löschen + Element entfernen Removing Step failed @@ -49009,7 +49009,7 @@ Möchten Sie fortfahren? %1? Möchten Sie %1 -wirklich löschen? +wirklich entfernen? QNX @@ -50542,7 +50542,7 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Remove Prefix... - Präfix löschen... + Präfix entfernen... Remove Missing Files @@ -50586,11 +50586,11 @@ Wenn Sie noch keinen privaten Schlüssel besitzen, können Sie hier auch einen e Remove Prefix - Präfix löschen + Präfix entfernen Remove prefix %1 and all its files? - Präfix %1 und alle zugehörigen Dateien löschen? + Präfix %1 und alle zugehörigen Dateien entfernen? File Removal Failed @@ -51958,7 +51958,7 @@ Testfall "%2" wird nicht aufgezeichnet. Remove Shared Folder - Gemeinsames Verzeichnis löschen + Gemeinsames Verzeichnis entfernen Open Squish Suites... @@ -51994,7 +51994,7 @@ Testfall "%2" wird nicht aufgezeichnet. Remove Shared File - Gemeinsame Datei löschen + Gemeinsame Datei entfernen Cancel @@ -52002,7 +52002,7 @@ Testfall "%2" wird nicht aufgezeichnet. Failed to remove "%1". - "%1" konnte nicht gelöscht werden. + "%1" konnte nicht entfernt werden. Remove "%1" from the list of shared folders? @@ -53027,11 +53027,11 @@ Die Datei "%1" konnte nicht geöffnet werden. Remove All Bookmarks - Alle Lesezeichen löschen + Alle Lesezeichen entfernen Are you sure you want to remove all bookmarks from all files in the current session? - Möchten Sie wirklich alle Lesezeichen aus allen Dateien der aktuellen Sitzung löschen? + Möchten Sie wirklich alle Lesezeichen aus allen Dateien der aktuellen Sitzung entfernen? &Bookmarks @@ -55564,7 +55564,7 @@ Außer Leerzeichen innerhalb von Kommentaren und Zeichenketten. Applied to removed characters in differences (in side-by-side diff editor). - Wird auf gelöschte Zeichen in den Unterschieden angewendet (bei Anzeige mit Gegenüberstellung der Unterschiede). + Wird auf entfernte Zeichen in den Unterschieden angewendet (bei Anzeige mit Gegenüberstellung der Unterschiede). Diff Destination Line @@ -56748,15 +56748,15 @@ Die Trace-Daten sind verloren. Refusing to remove the standard directory "%1". - Das Standardverzeichnis "%1" kann nicht entfernt werden. + Das Standardverzeichnis "%1" kann nicht gelöscht werden. Refusing to remove root directory. - Das Wurzelverzeichnis kann nicht entfernt werden. + Das Wurzelverzeichnis kann nicht gelöscht werden. Refusing to remove your home directory. - Das Benutzerverzeichnis (Home) kann nicht entfernt werden. + Das Benutzerverzeichnis (Home) kann nicht gelöscht werden. Failed to remove directory "%1". @@ -57100,7 +57100,7 @@ Die Trace-Daten sind verloren. Remove File - Datei entfernen + Datei löschen Remove Folder @@ -57108,7 +57108,7 @@ Die Trace-Daten sind verloren. File to remove: - Zu entfernende Datei: + Zu löschende Datei: Folder to remove: From 4ec2f0bf5410ab845db137fb6a06ca55a992a87d Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 22 Jul 2024 11:28:40 +0200 Subject: [PATCH 44/46] German translation: font -> Schrift MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "Schriftart" is the graphical style - "Zeichensatz" is a collection of characters, similar to what printers had, used for typesetting - "Zeichenkodierung" is character encoding - "Schriftschnitt/Schriftstil" is a variant of a "Schriftart", like weight, italic etc. - "Schriftfamilie" is the collection of all "Schriftstile" of a "Schriftart" "Schriftschnitt/stil" seems to be the most direct translation of "font", but keep it simple and just use "Schrift". Change-Id: I8705dda02879a69fe94c529a96644d6ba4efe706 Reviewed-by: Robert Löhning --- share/qtcreator/translations/qtcreator_de.ts | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/share/qtcreator/translations/qtcreator_de.ts b/share/qtcreator/translations/qtcreator_de.ts index 4c9a0280440..cab1639107a 100644 --- a/share/qtcreator/translations/qtcreator_de.ts +++ b/share/qtcreator/translations/qtcreator_de.ts @@ -3456,7 +3456,7 @@ The foreground component should be transparent, and the background component sho FontSection Font - Zeichensatz + Schrift Sets the font of the text. @@ -9554,7 +9554,7 @@ Locked components cannot be modified or selected. Font Files - Schriftart-Dateien + Schriftdateien Sound Files @@ -34044,11 +34044,11 @@ Hinweis: Dies macht Sie anfällig für Man-in-the-middle-Angriffe. Font - Zeichensatz + Schrift Family: - Name: + Familie: Style: @@ -52820,11 +52820,11 @@ Die Datei "%1" konnte nicht geöffnet werden. Family: - Name: + Familie: The font family used in the terminal. - Der Name der Zeichensatz-Familie, die im Terminal verwendet wird. + Die Schriftfamilie, die im Terminal verwendet wird. Size: @@ -52832,7 +52832,7 @@ Die Datei "%1" konnte nicht geöffnet werden. The font size used in the terminal (in points). - Die Größe des Zeichensatzes, der im Terminal verwendet wird (in Punkten). + Die Größe der Schrift, die im Terminal verwendet wird (in Punkten). Allow blinking cursor @@ -52912,7 +52912,7 @@ Die Datei "%1" konnte nicht geöffnet werden. Font - Zeichensatz + Schrift Colors @@ -53221,7 +53221,7 @@ Die Datei "%1" konnte nicht geöffnet werden. Font - Zeichensatz + Schrift Underline @@ -53255,7 +53255,7 @@ Die Datei "%1" konnte nicht geöffnet werden. Family: - Name: + Familie: Size: @@ -53353,7 +53353,7 @@ Werte kleiner als 100% können überlappende und falsch ausgerichtete Darstellun Font && Colors - Zeichensatz && Farben + Schrift && Farben Jumps to the given line in the current document. @@ -53972,7 +53972,7 @@ Gibt an, wie sich die Rücktaste bezüglich Einrückung verhält. <i>Set <a href="font zoom">font line spacing</a> to 100% to enable text wrapping option.</i> - <i>Setzen Sie den <a href="font zoom">Zeilenabstand</a> des Zeichensatzes auf 100%, um die Einstellung für Textumbruch zu aktivieren.</i> + <i>Setzen Sie den <a href="font zoom">Zeilenabstand</a> der Schrift auf 100%, um die Einstellung für Textumbruch zu aktivieren.</i> Tint whole margin area From f2a5c6f0cee738d22ee8c690d9bab1a005ba1362 Mon Sep 17 00:00:00 2001 From: Andrew Shark Date: Wed, 24 Jul 2024 01:48:31 +0300 Subject: [PATCH 45/46] Move icon selection mentioning to correct place The icon of kit is located next to "Name" field, not next to "Run Device Type" field. Also, it should not be double-clicked. Just single clicked. Change-Id: I962dbe2647beeae8f7c5038b2ead3903336172ab Reviewed-by: Leena Miettinen --- .../creator-only/creator-projects-kits.qdoc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc index 1237c748443..c730452965e 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-kits.qdoc @@ -102,9 +102,14 @@ \li \uicontrol Name \li Name of the kit. You can use variables to generate the kit name based on the values you set in the other fields. - \row - \li \inlineimage icons/qtcreator-desktopdevice-button.png - \li Image to use as an icon for the kit. + + Click the \inlineimage icons/qtcreator-desktopdevice-button.png icon next to the field, + and select the image that is displayed in the kit selector for this kit. + Select \uicontrol Browse to select an + image in a supported file format (for example, PNG). The image is + scaled to the size 64x64 pixels. For example, using the compiler + logo as an icon allows you to easily see, which compiler is used to + build the project for the selected kit. \row \li \uicontrol {File system name} \li Name for the kit to use as a part of directory names. This value is @@ -113,13 +118,6 @@ \row \li \uicontrol{Run device type} \li Type of the run device. - - Double-click the icon next to the field to select the image that is - displayed in the kit selector for this kit. You can use any - image in a supported file format (for example, PNG). The image is - scaled to the size 64x64 pixels. For example, using the compiler - logo as an icon allows you to easily see, which compiler is used to - build the project for the selected kit. \row \li \uicontrol {Run device} \li The device to run applications on. From 8758c3c8dd75d13868b844867c149d8c8f7029e9 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 12 Jul 2024 14:53:34 +0200 Subject: [PATCH 46/46] Editors: Fix crash after triggering dropdown menu after closing editor The context menu kept a handle on the editor and document, and these could be deleted behind its back. Use QPointers to actually check. Fixes: QTCREATORBUG-31232 Change-Id: I613abbe6dc0fbac60c2e527f715a7b8c2f083893 Reviewed-by: Christian Stenger --- .../editormanager/editormanager.cpp | 30 ++++++++++--------- .../editormanager/editormanager_p.h | 3 +- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index c8ef2a4f1ab..55c3dcdd3b3 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -539,12 +539,12 @@ void EditorManagerPrivate::init() this, &EditorManagerPrivate::closeAllEditorsExceptVisible); connect(m_openGraphicalShellContextAction, &QAction::triggered, this, [this] { - if (!m_contextMenuEntry || m_contextMenuEntry->filePath().isEmpty()) + if (!m_contextMenuDocument || m_contextMenuEntry->filePath().isEmpty()) return; FileUtils::showInGraphicalShell(ICore::dialogParent(), m_contextMenuEntry->filePath()); }); connect(m_showInFileSystemViewContextAction, &QAction::triggered, this, [this] { - if (!m_contextMenuEntry || m_contextMenuEntry->filePath().isEmpty()) + if (!m_contextMenuDocument || m_contextMenuEntry->filePath().isEmpty()) return; FileUtils::showInFileSystemView(m_contextMenuEntry->filePath()); }); @@ -552,7 +552,7 @@ void EditorManagerPrivate::init() connect(m_findInDirectoryAction, &QAction::triggered, this, &EditorManagerPrivate::findInDirectory); connect(m_filePropertiesAction, &QAction::triggered, this, [this] { - if (!m_contextMenuEntry || m_contextMenuEntry->filePath().isEmpty()) + if (!m_contextMenuDocument || m_contextMenuEntry->filePath().isEmpty()) return; DocumentManager::showFilePropertiesDialog(m_contextMenuEntry->filePath()); }); @@ -2402,14 +2402,14 @@ void EditorManagerPrivate::handleContextChange(const QList &context) void EditorManagerPrivate::copyFilePathFromContextMenu() { - if (!d->m_contextMenuEntry) + if (!d->m_contextMenuDocument) return; setClipboardAndSelection(d->m_contextMenuEntry->filePath().toUserOutput()); } void EditorManagerPrivate::copyLocationFromContextMenu() { - if (!d->m_contextMenuEntry) + if (!d->m_contextMenuDocument) return; const QString text = d->m_contextMenuEntry->filePath().toUserOutput() + QLatin1Char(':') + m_copyLocationContextAction->data().toString(); @@ -2418,28 +2418,28 @@ void EditorManagerPrivate::copyLocationFromContextMenu() void EditorManagerPrivate::copyFileNameFromContextMenu() { - if (!d->m_contextMenuEntry) + if (!d->m_contextMenuDocument) return; setClipboardAndSelection(d->m_contextMenuEntry->filePath().fileName()); } void EditorManagerPrivate::saveDocumentFromContextMenu() { - IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : nullptr; + IDocument *document = d->m_contextMenuDocument.get(); if (document) saveDocument(document); } void EditorManagerPrivate::saveDocumentAsFromContextMenu() { - IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : nullptr; + IDocument *document = d->m_contextMenuDocument.get(); if (document) saveDocumentAs(document); } void EditorManagerPrivate::revertToSavedFromContextMenu() { - IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : nullptr; + IDocument *document = d->m_contextMenuDocument.get(); if (document) revertToSaved(document); } @@ -2449,7 +2449,7 @@ void EditorManagerPrivate::closeEditorFromContextMenu() if (d->m_contextMenuEditor) { closeEditorOrDocument(d->m_contextMenuEditor); } else { - IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : nullptr; + IDocument *document = d->m_contextMenuDocument.get(); if (document) EditorManager::closeDocuments({document}); } @@ -2457,7 +2457,7 @@ void EditorManagerPrivate::closeEditorFromContextMenu() void EditorManagerPrivate::closeOtherDocumentsFromContextMenu() { - IDocument *document = d->m_contextMenuEntry ? d->m_contextMenuEntry->document : nullptr; + IDocument *document = d->m_contextMenuDocument.get(); EditorManager::closeOtherDocuments(document); } @@ -2613,14 +2613,14 @@ void EditorManagerPrivate::autoSuspendDocuments() void EditorManagerPrivate::openTerminal() { - if (!d->m_contextMenuEntry || d->m_contextMenuEntry->filePath().isEmpty()) + if (!d->m_contextMenuDocument || d->m_contextMenuEntry->filePath().isEmpty()) return; FileUtils::openTerminal(d->m_contextMenuEntry->filePath().parentDir(), {}); } void EditorManagerPrivate::findInDirectory() { - if (!d->m_contextMenuEntry || d->m_contextMenuEntry->filePath().isEmpty()) + if (!d->m_contextMenuDocument || d->m_contextMenuEntry->filePath().isEmpty()) return; const FilePath path = d->m_contextMenuEntry->filePath(); emit m_instance->findOnFileSystemRequest( @@ -2629,7 +2629,7 @@ void EditorManagerPrivate::findInDirectory() void EditorManagerPrivate::togglePinned() { - if (!d->m_contextMenuEntry || d->m_contextMenuEntry->filePath().isEmpty()) + if (!d->m_contextMenuDocument || d->m_contextMenuEntry->filePath().isEmpty()) return; const bool currentlyPinned = d->m_contextMenuEntry->pinned; @@ -2832,6 +2832,7 @@ void EditorManager::addSaveAndCloseEditorActions(QMenu *contextMenu, DocumentMod { QTC_ASSERT(contextMenu, return); d->m_contextMenuEntry = entry; + d->m_contextMenuDocument = entry ? entry->document : nullptr; d->m_contextMenuEditor = editor; const FilePath filePath = entry ? entry->filePath() : FilePath(); @@ -2911,6 +2912,7 @@ void EditorManager::addNativeDirAndOpenWithActions(QMenu *contextMenu, DocumentM { QTC_ASSERT(contextMenu, return); d->m_contextMenuEntry = entry; + d->m_contextMenuDocument = entry ? entry->document : nullptr; bool enabled = entry && !entry->filePath().isEmpty(); d->m_openGraphicalShellContextAction->setEnabled(enabled); d->m_showInFileSystemViewContextAction->setEnabled(enabled); diff --git a/src/plugins/coreplugin/editormanager/editormanager_p.h b/src/plugins/coreplugin/editormanager/editormanager_p.h index 34a67457219..b130c497e4b 100644 --- a/src/plugins/coreplugin/editormanager/editormanager_p.h +++ b/src/plugins/coreplugin/editormanager/editormanager_p.h @@ -250,7 +250,8 @@ private: QAction *m_filePropertiesAction = nullptr; QAction *m_pinAction = nullptr; DocumentModel::Entry *m_contextMenuEntry = nullptr; - IEditor *m_contextMenuEditor = nullptr; + QPointer m_contextMenuDocument; + QPointer m_contextMenuEditor; OpenEditorsWindow *m_windowPopup = nullptr;