Merge remote-tracking branch 'origin/13.0' into qds/dev

Change-Id: Ief07ead0b4cf513c70bd74d4f5e28e4642edc78e
This commit is contained in:
Tim Jenssen
2024-05-17 19:55:06 +02:00
23 changed files with 128 additions and 71 deletions

View File

@@ -1,6 +1,6 @@
set(IDE_VERSION "13.0.1") # The IDE version.
set(IDE_VERSION "13.0.2") # The IDE version.
set(IDE_VERSION_COMPAT "13.0.0") # The IDE Compatibility version.
set(IDE_VERSION_DISPLAY "13.0.1") # The IDE display version.
set(IDE_VERSION_DISPLAY "13.0.2") # The IDE display version.
set(IDE_COPYRIGHT_YEAR "2024") # The IDE current copyright year.
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.

View File

@@ -32,6 +32,7 @@ macro.QDV = "Qt Design Viewer"
macro.QL = "Qt Linguist"
macro.QMCU = "Qt for MCUs"
macro.QMLD = "Qt Quick Designer"
macro.QMLLS = "QML Language Server"
macro.QQV = "Qt QML Viewer"
macro.QSDK = "Qt"
macro.QUL = "Qt Quick Ultralite"

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -62,7 +62,8 @@
\section1 Adding Language Servers
\QC adds a Python language server by default.
\QC adds a \l{Configure Python language servers}{Python language server} by
default.
Also, it offers to install language servers for JSON and YAML files
when you open them in the editor if it can find the
@@ -71,9 +72,9 @@
\image qtcreator-language-server-json.webp {Prompt to install JSON language server}
Add a Java language server for \l{Connecting Android Devices}
{Android development}. For other languages, add generic stdIO language
servers.
\l{Add a Java language server} for \l{Connecting Android Devices}
{Android development}. For other languages,
\l{Add generic language servers}{add generic stdIO language servers}.
To add language servers, go to \preferences > \uicontrol {Language Client}
and select \uicontrol Add.
@@ -83,6 +84,10 @@
To enable a language server, select the checkbox next to the language
server name and set server preferences.
To turn on \l{Turn on \QMLLS}{\QMLLS}, go to
\preferences > \uicontrol {Qt Quick} > \uicontrol {QML/JS Editing} and
select \uicontrol {Enable \QMLLS}.
To remove language servers from the list, select \uicontrol Delete.
\section1 Supported Locator Filters
@@ -218,23 +223,23 @@
\ingroup creator-how-to-lsp
\title Turn on QML Language Server
\title Turn on \QMLLS
Since Qt 6.4, the QML language server offers code completion and
Since Qt 6.4, \QMLLS offers code completion and
issues warnings for QML. To use it, go to \preferences >
\uicontrol {Qt Quick} > \uicontrol {QML/JS Editing} and select
\uicontrol {Enable QML Language Server}.
\uicontrol {Enable \QMLLS}.
By default, enabling the QML language server will only enable warning messages
By default, enabling \QMLLS will only enable warning messages
and code completion, while advanced features such as renaming and finding usages
will be handled by the embedded code model.
To disable the embedded code model and use the QML language server for everything,
select \uicontrol {Use QML Language Server advanced features}.
To disable the embedded code model and use \QMLLS for everything,
select \uicontrol {Use \QMLLS advanced features}.
Also, \QC tries to use the QML language server shipped with
the Qt version in your current kit. To override that behavior and always use the
QML language server of the highest registered Qt version, select
\uicontrol {Use QML Language Server from latest Qt version}.
Also, \QC tries to use \QMLLS shipped with
the Qt version in your current kit. To override that behavior and always use
\QMLLS of the highest registered Qt version, select
\uicontrol {Use \QMLLS from latest Qt version}.
\image qtcreator-qml-js-editing.webp {QML/JS Editing preferences}

View File

@@ -1,6 +1,10 @@
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\externalpage https://www.perforce.com/manuals/cmdref/Content/CmdRef/P4CONFIG.html
\title Perforce: P4CONFIG
*/
/*!
\externalpage https://doc.qt.io/Boot2Qt/index.html
\title Boot2Qt: Documentation

View File

@@ -1,4 +1,4 @@
// Copyright (C) 2021 The Qt Company Ltd.
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
// **********************************************************************
@@ -50,10 +50,17 @@
the \uicontrol Boot2Qt tag (commercial only) in the search field
(4) to list examples that you can run on Boot2Qt devices.
\li In \uicontrol {Configure Project}, select
\l{glossary-buildandrun-kit}{kits} for building the example for the
target platforms.
\image qtcreator-configure-project.webp {Configure Project view}
\li Select \uicontrol {Configure Project}.
\li To check that you can compile and link the application code for a
device, click the \uicontrol {Kit Selector} and select a
\l{glossary-buildandrun-kit}{kit} for the
device.
device, click the \uicontrol {Kit Selector} and select the kit for
the device.
\image qtcreator-examples-kit-selector.webp {Selecting a kit to build with}
@@ -61,7 +68,7 @@
automatically detected the installed kit. If you cannot see any kits,
see \l{Add kits}.
\li Click \inlineimage icons/run_small.png
\li Select \inlineimage icons/run_small.png
(\uicontrol Run) to build and run the application.
\li To see the compilation progress, press \key{Alt+4} to open
@@ -78,7 +85,7 @@
\endlist
\sa {Add compilers}, {Add kits}, {Add Qt versions},
\sa {Manage Kits}{How To: Manage Kits}, {Open projects},
{Connecting Android Devices}, {Connecting iOS Devices},
{Compile Output}, {Boot2Qt: Documentation}, {Qt Design Studio Manual}
*/

View File

@@ -63,15 +63,15 @@
To re-configure projects:
\list 1
\li In the \uicontrol {Configure Project} tab, select
\li In \uicontrol {Configure Project}, select
\l{glossary-buildandrun-kit}{kits} for building
and running your project.
\image qtcreator-open-project-kits.png {Configure Project tab}
\image qtcreator-configure-project.webp {Configure Project view}
\li Select \uicontrol {Configure Project}.
\endlist
The \uicontrol {Configure Project} tab displays a list of kits that you
install on the development PC and configure in \preferences > \uicontrol Kits.
\uicontrol {Configure Project} shows a list of kits that you
install on the computer and configure in \preferences > \uicontrol Kits.
Even if you do not intend to build the project, the C++ and QML code models
need a Qt version and compiler to offer code completion. To specify them,

View File

@@ -35,11 +35,26 @@
Set workspace details in \uicontrol {P4 user}, \uicontrol {P4 client}, and
\uicontrol {P4 port}.
To specify the details individually for several projects, use configuration
files instead. Create a \c {p4config.txt} configuration file for each
project in the top level project directory, and run
\c{p4 set P4CONFIG=p4config.txt} once. You must deselect the
\uicontrol {Environment Variables} check box.
\section1 Using Configuration Files
To specify workspace details individually for several projects, use
configuration files:
\list 1
\li Create a \c {p4config.txt} configuration file for each project in the
top level project directory.
\li Go to \preferences > \uicontrol {Version Control} >
\uicontrol Perforce.
\li Clear \uicontrol {Environment Variables}.
\li To set \c P4CONFIG to use the file that you created, run the
following command from the command line once:
\badcode
p4 set P4CONFIG=p4config.txt
\endcode
\endlist
For more information about using the \c P4CONFIG variable, see
\l{Perforce: P4CONFIG}.
\section1 Editing Files

View File

@@ -4,10 +4,10 @@ import qbs.FileInfo
import qbs.Utilities
Module {
property string qtcreator_display_version: '13.0.1'
property string qtcreator_display_version: '13.0.2'
property string ide_version_major: '13'
property string ide_version_minor: '0'
property string ide_version_release: '1'
property string ide_version_release: '2'
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
+ ide_version_release

View File

@@ -50,8 +50,9 @@
*/
/*!
\fn void ExtensionSystem::PluginView::pluginSettingsChanged(ExtensionSystem::PluginSpec *spec)
The settings for the plugin list entry corresponding to \a spec changed.
\fn void ExtensionSystem::PluginView::pluginsChanged(const QSet<ExtensionSystem::PluginSpec *> &spec, bool enabled)
The value of \a enabled for the plugin list entry corresponding to \a spec
changed.
*/
using namespace Utils;

View File

@@ -115,6 +115,17 @@ public:
their data, or use an ID, neither of these is mandatory.
*/
/*!
\enum Utils::BaseAspect::Announcement
Whether to emit a signal when a value changes.
\value DoEmit
Emit a signal.
\value BeQuiet
Don't emit a signal.
*/
/*!
Constructs a base aspect.
@@ -159,7 +170,9 @@ QVariant BaseAspect::variantValue() const
/*!
Sets \a value.
Prefer the typed setValue() of derived classes.
If \a howToAnnounce is set to \c DoEmit, emits the \c valueChanged signal.
Prefer the typed \c setValue() of the derived classes.
*/
void BaseAspect::setVariantValue(const QVariant &value, Announcement howToAnnounce)
{
@@ -939,9 +952,6 @@ public:
Based on QTextEdit, used for user-editable strings that often
do not fit on a line.
\value PathChooserDisplay
Based on Utils::PathChooser.
\value PasswordLineEditDisplay
Based on QLineEdit, used for password strings
@@ -1416,7 +1426,10 @@ FilePath FilePathAspect::operator()() const
FilePath FilePathAspect::expandedValue() const
{
return FilePath::fromUserInput(TypedAspect::value());
const auto value = TypedAspect::value();
if (!value.isEmpty() && d->m_expanderProvider)
return FilePath::fromUserInput(d->m_expanderProvider()->expand(value));
return FilePath::fromUserInput(value);
}
QString FilePathAspect::value() const
@@ -1425,7 +1438,9 @@ QString FilePathAspect::value() const
}
/*!
Sets the value of this file path aspect to \a value.
Sets the value of this file path aspect to \a filePath.
If \a howToAnnounce is set to \c DoEmit, emits the \c valueChanged signal.
\note This does not use any check that the value is actually
a file path.
@@ -2781,8 +2796,8 @@ void IntegersAspect::addToLayout(Layouting::LayoutItem &parent)
*/
/*!
Constructs a text display showing the \a message with an icon representing
type \a type.
Constructs a text display with the parent \a container. The display shows
\a message and an icon representing the type \a type.
*/
TextDisplay::TextDisplay(AspectContainer *container, const QString &message, InfoLabel::InfoType type)
: BaseAspect(container), d(new Internal::TextDisplayPrivate)

View File

@@ -190,8 +190,6 @@ expected_str<qint64> ProcessStubCreator::startStubProcess(const ProcessSetupData
process->setEnvironment(
setupData.m_environment.appliedToEnvironment(Environment::systemEnvironment()));
process->setEnvironment(setupData.m_environment);
process->start();
process->waitForStarted();
if (process->error() != QProcess::UnknownError) {

View File

@@ -1002,7 +1002,7 @@ QAbstractItemModel *AndroidBuildApkStep::keystoreCertificates()
Process keytoolProc;
keytoolProc.setCommand({androidConfig().keytoolPath(), params});
using namespace std::chrono_literals;
keytoolProc.runBlocking(30s, EventLoopMode::On);
keytoolProc.runBlocking(30s);
if (keytoolProc.result() > ProcessResult::FinishedWithError)
QMessageBox::critical(nullptr, Tr::tr("Error"), Tr::tr("Failed to run keytool."));
else

View File

@@ -275,7 +275,7 @@ void AndroidCreateKeystoreCertificate::buttonBoxAccepted()
Process genKeyCertProc;
genKeyCertProc.setCommand(command);
using namespace std::chrono_literals;
genKeyCertProc.runBlocking(15s, EventLoopMode::On);
genKeyCertProc.runBlocking(15s);
if (genKeyCertProc.result() != ProcessResult::FinishedWithSuccess) {
QMessageBox::critical(this, Tr::tr("Error"),

View File

@@ -614,7 +614,7 @@ bool checkKeystorePassword(const FilePath &keystorePath, const QString &keystore
"--storepass", keystorePasswd});
Process proc;
proc.setCommand(cmd);
proc.runBlocking(10s, EventLoopMode::On);
proc.runBlocking(10s);
return proc.result() == ProcessResult::FinishedWithSuccess;
}
@@ -631,7 +631,7 @@ bool checkCertificatePassword(const FilePath &keystorePath, const QString &keyst
Process proc;
proc.setCommand({androidConfig().keytoolPath(), arguments});
proc.runBlocking(10s, EventLoopMode::On);
proc.runBlocking(10s);
return proc.result() == ProcessResult::FinishedWithSuccess;
}
@@ -644,7 +644,7 @@ bool checkCertificateExists(const FilePath &keystorePath, const QString &keystor
Process proc;
proc.setCommand({androidConfig().keytoolPath(), arguments});
proc.runBlocking(10s, EventLoopMode::On);
proc.runBlocking(10s);
return proc.result() == ProcessResult::FinishedWithSuccess;
}

View File

@@ -308,7 +308,8 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
std::optional<QString> dllName;
if (buildDir.osType() == OsTypeWindows && (f.role == "libraries")) {
part = FilePath::fromUserInput(part).fileName();
const auto partAsFilePath = FilePath::fromUserInput(part);
part = partAsFilePath.fileName();
// Skip object libraries on Windows. This case can happen with static qml plugins
if (part.endsWith(".obj") || part.endsWith(".o"))
@@ -322,13 +323,16 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t,
}
// MinGW has libQt6Core.a -> Qt6Core.dll
// but libFoo.dll.a was already handled above
const QString mingwPrefix("lib");
const QString mingwSuffix(".a");
if (part.startsWith(mingwPrefix) && part.endsWith(mingwSuffix))
dllName = part.chopped(mingwSuffix.length())
const QString mingwSuffix("a");
const QString completeSuffix = partAsFilePath.completeSuffix();
if (part.startsWith(mingwPrefix) && completeSuffix == mingwSuffix) {
dllName = part.chopped(mingwSuffix.length() + 1/*the '.'*/)
.sliced(mingwPrefix.length())
.append(".dll");
}
}
if (!tmp.isEmpty() && tmp.isDir()) {
// f.role is libraryPath or frameworkPath

View File

@@ -30,7 +30,7 @@ using namespace Utils;
and \uicontrol {Files in File System} where the user provides a directory and file
patterns to search.
\image qtcreator-search-filesystem.png
\image qtcreator-search-reg-exp.webp {Search Results view with search criteria}
To make your find scope available to the user, you need to implement this
class, and register an instance of your subclass in the plugin manager.
@@ -38,7 +38,7 @@ using namespace Utils;
A common way to present the search results to the user, is to use the
shared \uicontrol{Search Results} pane.
\image qtcreator-search-results.webp {Search Results view}
\image qtcreator-search-results-reg-exp.webp {Search Results view with search results}
If you want to implement a find filter that is doing a file based text
search, you should use \l Core::BaseTextFind, which already implements all
@@ -178,13 +178,13 @@ using namespace Utils;
*/
/*!
\fn void Core::IFindFilter::writeSettings(QSettings *settings)
\fn void Core::IFindFilter::writeSettings(Utils::QtcSettings *settings)
Called at shutdown to write the state of the additional options
for this find filter to the \a settings.
*/
/*!
\fn void Core::IFindFilter::readSettings(QSettings *settings)
\fn void Core::IFindFilter::readSettings(Utils::QtcSettings *settings)
Called at startup to read the state of the additional options
for this find filter from the \a settings.
*/

View File

@@ -288,10 +288,13 @@ using namespace Core::Internal;
This enum type specifies whether the search results should be sorted or
ordered:
\value AddSorted
The search results are sorted.
\value AddSortedByContent
The search results are sorted alphabetically.
\value AddSortedByPosition
The search results are sorted by the search results' reported line
numbers.
\value AddOrdered
The search results are ordered.
The search results are ordered as they are reported.
*/
/*!
@@ -331,7 +334,7 @@ using namespace Core::Internal;
\brief The SearchResultWindow class is the implementation of a commonly
shared \uicontrol{Search Results} output pane.
\image qtcreator-search-results.webp {Search Results view}
\image qtcreator-search-results-reg-exp.webp {Search Results view with search results}
Whenever you want to show the user a list of search results, or want
to present UI for a global search and replace, use the single instance

View File

@@ -103,7 +103,7 @@ bool QtDesignerFormClassCodeGenerator::generateCpp(const FormClassWizardParamete
Utils::writeIncludeFileDirective("QtGui/" + formBaseClass, true, headerStr);
headerStr << "#endif\n";
} else {
Utils::writeIncludeFileDirective("QtGui/" + formBaseClass, true, headerStr);
Utils::writeIncludeFileDirective("QtWidgets/" + formBaseClass, true, headerStr);
}
} else {
Utils::writeIncludeFileDirective(formBaseClass, true, headerStr);

View File

@@ -1512,7 +1512,8 @@ private:
const QString sshCmdLine = ProcessArgs::joinArgs(
QStringList{SshSettings::sshFilePath().toUserOutput()}
<< fullConnectionOptions(), OsTypeLinux);
QStringList options{"-e", sshCmdLine, m_setup.m_rsyncFlags};
QStringList options{"-e", sshCmdLine};
options << ProcessArgs::splitArgs(m_setup.m_rsyncFlags, HostOsInfo::hostOs());
if (!m_batches.isEmpty()) { // NormalRun
const auto batchIt = m_batches.begin();

View File

@@ -48,12 +48,15 @@ def main():
snooze(1)
type(editor, ">")
snooze(1)
proposalExists = lambda: object.exists(':popupFrame_TextEditor::GenericProposalWidget')
nativeType("%s" % buttonName[0])
test.verify(waitFor("object.exists(':popupFrame_TextEditor::GenericProposalWidget')", 1500),
"Verify that GenericProposalWidget is being shown.")
if test.verify(waitFor(proposalExists, 4000),
"Verify that GenericProposalWidget is being shown."):
nativeType("<Return>")
test.verify(waitFor('str(lineUnderCursor(editor)).strip() == "ui->%s" % buttonName', 1000),
'Comparing line "%s" to expected "%s"' % (lineUnderCursor(editor), "ui->%s" % buttonName))
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, "<Shift+Delete>") # Delete line
selectFromLocator("mainwindow.ui")
saveAndExit()