forked from qt-creator/qt-creator
Merge "Merge remote-tracking branch 'origin/12.0'"
This commit is contained in:
45
dist/changelog/changes-12.0.1.md
vendored
45
dist/changelog/changes-12.0.1.md
vendored
@@ -14,7 +14,7 @@ General
|
|||||||
-------
|
-------
|
||||||
|
|
||||||
* Fixed opening files with drag and drop on Qt Creator
|
* Fixed opening files with drag and drop on Qt Creator
|
||||||
(QTCREATORBUG-29961)
|
([QTCREATORBUG-29961](https://bugreports.qt.io/browse/QTCREATORBUG-29961))
|
||||||
|
|
||||||
Editing
|
Editing
|
||||||
-------
|
-------
|
||||||
@@ -22,28 +22,45 @@ Editing
|
|||||||
### C++
|
### C++
|
||||||
|
|
||||||
* Fixed a crash while parsing
|
* Fixed a crash while parsing
|
||||||
(QTCREATORBUG-29847)
|
([QTCREATORBUG-29847](https://bugreports.qt.io/browse/QTCREATORBUG-29847))
|
||||||
* Fixed a freeze when hovering over a class declaration
|
* Fixed a freeze when hovering over a class declaration
|
||||||
(QTCREATORBUG-29975)
|
([QTCREATORBUG-29975](https://bugreports.qt.io/browse/QTCREATORBUG-29975))
|
||||||
* Fixed the renaming of virtual functions
|
* Fixed the renaming of virtual functions
|
||||||
* Fixed `Select Block Up` for string literals
|
* Fixed `Select Block Up` for string literals
|
||||||
(QTCREATORBUG-29844)
|
([QTCREATORBUG-29844](https://bugreports.qt.io/browse/QTCREATORBUG-29844))
|
||||||
* Fixed the conversion between comment styles for certain indented comments
|
* Fixed the conversion between comment styles for certain indented comments
|
||||||
|
* Clang Format
|
||||||
|
* Fixed the indentation after multi-byte UTF-8 characters
|
||||||
|
([QTCREATORBUG-29927](https://bugreports.qt.io/browse/QTCREATORBUG-29927))
|
||||||
|
|
||||||
|
### Widget Designer
|
||||||
|
|
||||||
|
* Fixed that the buttons for editing signals and slots and editing buddies
|
||||||
|
were switched
|
||||||
|
([QTCREATORBUG-30017](https://bugreports.qt.io/browse/QTCREATORBUG-30017))
|
||||||
|
|
||||||
Projects
|
Projects
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* Fixed the restoring of custom Kit data
|
* Fixed the restoring of custom Kit data
|
||||||
(QTCREATORBUG-29970)
|
([QTCREATORBUG-29970](https://bugreports.qt.io/browse/QTCREATORBUG-29970))
|
||||||
* Fixed overlapping labels in the target selector
|
* Fixed overlapping labels in the target selector
|
||||||
(QTCREATORBUG-29990)
|
([QTCREATORBUG-29990](https://bugreports.qt.io/browse/QTCREATORBUG-29990))
|
||||||
* Fixed the label for `Custom Executable` run configurations
|
* Fixed the label for `Custom Executable` run configurations
|
||||||
(QTCREATORBUG-29983)
|
([QTCREATORBUG-29983](https://bugreports.qt.io/browse/QTCREATORBUG-29983))
|
||||||
|
|
||||||
### CMake
|
### CMake
|
||||||
|
|
||||||
* Fixed a crash when opening projects
|
* Fixed a crash when opening projects
|
||||||
(QTCREATORBUG-29965)
|
([QTCREATORBUG-29965](https://bugreports.qt.io/browse/QTCREATORBUG-29965))
|
||||||
|
* Fixed a crash when editing CMake files without a project
|
||||||
|
([QTCREATORBUG-30023](https://bugreports.qt.io/browse/QTCREATORBUG-30023))
|
||||||
|
* Fixed that directories were marked as invalid for the `Staging Directory`
|
||||||
|
([QTCREATORBUG-29997](https://bugreports.qt.io/browse/QTCREATORBUG-29997))
|
||||||
|
|
||||||
|
### Qbs
|
||||||
|
|
||||||
|
* Fixed a crash when parsing projects
|
||||||
|
|
||||||
Analyzer
|
Analyzer
|
||||||
--------
|
--------
|
||||||
@@ -51,7 +68,7 @@ Analyzer
|
|||||||
### Valgrind
|
### Valgrind
|
||||||
|
|
||||||
* Fixed stopping the Valgrind process
|
* Fixed stopping the Valgrind process
|
||||||
(QTCREATORBUG-29948)
|
([QTCREATORBUG-29948](https://bugreports.qt.io/browse/QTCREATORBUG-29948))
|
||||||
|
|
||||||
Version Control Systems
|
Version Control Systems
|
||||||
-----------------------
|
-----------------------
|
||||||
@@ -60,7 +77,7 @@ Version Control Systems
|
|||||||
|
|
||||||
* Fixed that empty blame annotations are shown after saving a file outside of
|
* Fixed that empty blame annotations are shown after saving a file outside of
|
||||||
the version control directory
|
the version control directory
|
||||||
(QTCREATORBUG-29991)
|
([QTCREATORBUG-29991](https://bugreports.qt.io/browse/QTCREATORBUG-29991))
|
||||||
|
|
||||||
Platforms
|
Platforms
|
||||||
---------
|
---------
|
||||||
@@ -68,26 +85,28 @@ Platforms
|
|||||||
### Linux
|
### Linux
|
||||||
|
|
||||||
* Added an error dialog for errors when loading the Qt platform plugin
|
* Added an error dialog for errors when loading the Qt platform plugin
|
||||||
(QTCREATORBUG-30004)
|
([QTCREATORBUG-30004](https://bugreports.qt.io/browse/QTCREATORBUG-30004))
|
||||||
|
|
||||||
### Boot2Qt
|
### Boot2Qt
|
||||||
|
|
||||||
* Fixed deployment on Windows
|
* Fixed deployment on Windows
|
||||||
(QTCREATORBUG-29971)
|
([QTCREATORBUG-29971](https://bugreports.qt.io/browse/QTCREATORBUG-29971))
|
||||||
|
|
||||||
### MCU
|
### MCU
|
||||||
|
|
||||||
* Fixed `Replace existing kits` after changing MCU SDK path
|
* Fixed `Replace existing kits` after changing MCU SDK path
|
||||||
(QTCREATORBUG-29960)
|
([QTCREATORBUG-29960](https://bugreports.qt.io/browse/QTCREATORBUG-29960))
|
||||||
|
|
||||||
Credits for these changes go to:
|
Credits for these changes go to:
|
||||||
--------------------------------
|
--------------------------------
|
||||||
Alessandro Portale
|
Alessandro Portale
|
||||||
Andre Hartmann
|
Andre Hartmann
|
||||||
|
Artem Sokolovskii
|
||||||
Christian Kandeler
|
Christian Kandeler
|
||||||
Christian Stenger
|
Christian Stenger
|
||||||
Cristian Adam
|
Cristian Adam
|
||||||
Eike Ziller
|
Eike Ziller
|
||||||
|
Friedemann Kleint
|
||||||
Jaroslaw Kobus
|
Jaroslaw Kobus
|
||||||
Marcus Tillmanns
|
Marcus Tillmanns
|
||||||
Orgad Shaneh
|
Orgad Shaneh
|
||||||
|
@@ -149,7 +149,8 @@ CMakeManager::CMakeManager()
|
|||||||
cmakeDebuggerAction.setCommandDescription(m_cmakeDebuggerAction->text());
|
cmakeDebuggerAction.setCommandDescription(m_cmakeDebuggerAction->text());
|
||||||
cmakeDebuggerAction.setContainer(PEC::M_DEBUG_STARTDEBUGGING, Constants::CMAKE_DEBUGGING_GROUP);
|
cmakeDebuggerAction.setContainer(PEC::M_DEBUG_STARTDEBUGGING, Constants::CMAKE_DEBUGGING_GROUP);
|
||||||
cmakeDebuggerAction.setOnTriggered(this, [] {
|
cmakeDebuggerAction.setOnTriggered(this, [] {
|
||||||
ProjectExplorerPlugin::runStartupProject(PEC::DAP_CMAKE_DEBUG_RUN_MODE, false);
|
ProjectExplorerPlugin::runStartupProject(PEC::DAP_CMAKE_DEBUG_RUN_MODE,
|
||||||
|
/*forceSkipDeploy=*/true);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, [this] {
|
connect(ProjectManager::instance(), &ProjectManager::startupProjectChanged, this, [this] {
|
||||||
|
@@ -190,6 +190,7 @@ int CppRefactoringFile::startOf(unsigned index) const
|
|||||||
|
|
||||||
int CppRefactoringFile::startOf(const AST *ast) const
|
int CppRefactoringFile::startOf(const AST *ast) const
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(ast, return 0);
|
||||||
int firstToken = ast->firstToken();
|
int firstToken = ast->firstToken();
|
||||||
const int lastToken = ast->lastToken();
|
const int lastToken = ast->lastToken();
|
||||||
while (tokenAt(firstToken).generated() && firstToken < lastToken)
|
while (tokenAt(firstToken).generated() && firstToken < lastToken)
|
||||||
@@ -206,6 +207,7 @@ int CppRefactoringFile::endOf(unsigned index) const
|
|||||||
|
|
||||||
int CppRefactoringFile::endOf(const AST *ast) const
|
int CppRefactoringFile::endOf(const AST *ast) const
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(ast, return 0);
|
||||||
int lastToken = ast->lastToken() - 1;
|
int lastToken = ast->lastToken() - 1;
|
||||||
QTC_ASSERT(lastToken >= 0, return -1);
|
QTC_ASSERT(lastToken >= 0, return -1);
|
||||||
const int firstToken = ast->firstToken();
|
const int firstToken = ast->firstToken();
|
||||||
|
@@ -1232,13 +1232,15 @@ void DebuggerPluginPrivate::createDapDebuggerPerspective(QWidget *globalLogWindo
|
|||||||
{
|
{
|
||||||
QString name;
|
QString name;
|
||||||
char const *runMode;
|
char const *runMode;
|
||||||
|
bool forceSkipDeploy = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
const QList<DapPerspective> perspectiveList = {
|
const QList<DapPerspective> perspectiveList = {
|
||||||
DapPerspective{Tr::tr("CMake Preset"), ProjectExplorer::Constants::DAP_CMAKE_DEBUG_RUN_MODE},
|
DapPerspective{Tr::tr("CMake Preset"),
|
||||||
|
ProjectExplorer::Constants::DAP_CMAKE_DEBUG_RUN_MODE,
|
||||||
|
/*forceSkipDeploy=*/true},
|
||||||
DapPerspective{Tr::tr("GDB Preset"), ProjectExplorer::Constants::DAP_GDB_DEBUG_RUN_MODE},
|
DapPerspective{Tr::tr("GDB Preset"), ProjectExplorer::Constants::DAP_GDB_DEBUG_RUN_MODE},
|
||||||
DapPerspective{Tr::tr("Python Preset"),
|
DapPerspective{Tr::tr("Python Preset"), ProjectExplorer::Constants::DAP_PY_DEBUG_RUN_MODE},
|
||||||
ProjectExplorer::Constants::DAP_PY_DEBUG_RUN_MODE},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const DapPerspective &dp : perspectiveList)
|
for (const DapPerspective &dp : perspectiveList)
|
||||||
@@ -1246,10 +1248,11 @@ void DebuggerPluginPrivate::createDapDebuggerPerspective(QWidget *globalLogWindo
|
|||||||
|
|
||||||
connect(&m_startDapAction, &QAction::triggered, this, [perspectiveList] {
|
connect(&m_startDapAction, &QAction::triggered, this, [perspectiveList] {
|
||||||
QComboBox *combo = qobject_cast<QComboBox *>(EngineManager::dapEngineChooser());
|
QComboBox *combo = qobject_cast<QComboBox *>(EngineManager::dapEngineChooser());
|
||||||
if (perspectiveList.size() > combo->currentIndex())
|
if (perspectiveList.size() > combo->currentIndex()) {
|
||||||
ProjectExplorerPlugin::runStartupProject(perspectiveList.at(combo->currentIndex())
|
const DapPerspective dapPerspective = perspectiveList.at(combo->currentIndex());
|
||||||
.runMode,
|
ProjectExplorerPlugin::runStartupProject(dapPerspective.runMode,
|
||||||
false);
|
dapPerspective.forceSkipDeploy);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
auto breakpointManagerView = createBreakpointManagerView("DAPDebugger.BreakWindow");
|
auto breakpointManagerView = createBreakpointManagerView("DAPDebugger.BreakWindow");
|
||||||
|
@@ -2088,7 +2088,7 @@ void ProjectExplorerPlugin::extensionsInitialized()
|
|||||||
const QStringList rawGitSearchPaths = ICore::settings()->value("Git/Path")
|
const QStringList rawGitSearchPaths = ICore::settings()->value("Git/Path")
|
||||||
.toString().split(':', Qt::SkipEmptyParts);
|
.toString().split(':', Qt::SkipEmptyParts);
|
||||||
const FilePaths gitSearchPaths = Utils::transform(rawGitSearchPaths,
|
const FilePaths gitSearchPaths = Utils::transform(rawGitSearchPaths,
|
||||||
[](const QString &rawPath) { return FilePath::fromString(rawPath); });
|
[](const QString &rawPath) { return FilePath::fromUserInput(rawPath); });
|
||||||
const FilePath fullGitPath = Environment::systemEnvironment()
|
const FilePath fullGitPath = Environment::systemEnvironment()
|
||||||
.searchInPath(gitBinary, gitSearchPaths);
|
.searchInPath(gitBinary, gitSearchPaths);
|
||||||
if (!fullGitPath.isEmpty()) {
|
if (!fullGitPath.isEmpty()) {
|
||||||
|
BIN
src/plugins/python/images/qtforpython_neon.png
Normal file
BIN
src/plugins/python/images/qtforpython_neon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
@@ -132,20 +132,40 @@ void PySideInstaller::installPyside(const FilePath &python,
|
|||||||
} else {
|
} else {
|
||||||
QDialog dialog;
|
QDialog dialog;
|
||||||
dialog.setWindowTitle(Tr::tr("Select PySide Version"));
|
dialog.setWindowTitle(Tr::tr("Select PySide Version"));
|
||||||
dialog.setLayout(new QVBoxLayout());
|
|
||||||
dialog.layout()->addWidget(new QLabel(Tr::tr("Select which PySide version to install:")));
|
// Logo for the corner in the QDialog
|
||||||
|
QPixmap logo(":/python/images/qtforpython_neon.png");
|
||||||
|
QLabel *logoLabel = new QLabel();
|
||||||
|
logoLabel->setPixmap(logo);
|
||||||
|
|
||||||
|
QVBoxLayout *dialogLayout = new QVBoxLayout();
|
||||||
|
QHBoxLayout *hlayout = new QHBoxLayout();
|
||||||
|
hlayout->addWidget(logoLabel);
|
||||||
|
hlayout->addWidget(new QLabel("<b>" + Tr::tr("Installing PySide") + "</b>"));
|
||||||
|
dialogLayout->addLayout(hlayout);
|
||||||
|
|
||||||
|
QLabel *installDescription = new QLabel(Tr::tr("You can install PySide "
|
||||||
|
"from PyPi (Community OSS version) or from your Qt "
|
||||||
|
"installation location, if you are using the Qt "
|
||||||
|
"Installer and have a commercial license."));
|
||||||
|
installDescription->setWordWrap(true);
|
||||||
|
dialogLayout->addWidget(installDescription);
|
||||||
|
|
||||||
|
dialogLayout->addWidget(new QLabel(Tr::tr("Select which version to install:")));
|
||||||
QComboBox *pySideSelector = new QComboBox();
|
QComboBox *pySideSelector = new QComboBox();
|
||||||
pySideSelector->addItem(Tr::tr("Latest PySide from the Python Package Index"));
|
pySideSelector->addItem(Tr::tr("Latest PySide from the PyPI"));
|
||||||
for (const Utils::FilePath &version : std::as_const(availablePySides)) {
|
for (const Utils::FilePath &version : std::as_const(availablePySides)) {
|
||||||
const FilePath dir = version.parentDir();
|
const FilePath dir = version.parentDir();
|
||||||
const QString text
|
const QString text
|
||||||
= Tr::tr("PySide %1 Wheel (%2)").arg(dir.fileName(), dir.toUserOutput());
|
= Tr::tr("PySide %1 Wheel (%2)").arg(dir.fileName(), dir.toUserOutput());
|
||||||
pySideSelector->addItem(text, version.toVariant());
|
pySideSelector->addItem(text, version.toVariant());
|
||||||
}
|
}
|
||||||
dialog.layout()->addWidget(pySideSelector);
|
dialogLayout->addWidget(pySideSelector);
|
||||||
QDialogButtonBox box;
|
QDialogButtonBox box;
|
||||||
box.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
box.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
|
||||||
dialog.layout()->addWidget(&box);
|
dialogLayout->addWidget(&box);
|
||||||
|
|
||||||
|
dialog.setLayout(dialogLayout);
|
||||||
connect(&box, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
connect(&box, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
|
||||||
connect(&box, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
|
connect(&box, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
|
||||||
|
|
||||||
|
@@ -2,5 +2,6 @@
|
|||||||
<qresource prefix="/python">
|
<qresource prefix="/python">
|
||||||
<file>images/settingscategory_python.png</file>
|
<file>images/settingscategory_python.png</file>
|
||||||
<file>images/settingscategory_python@2x.png</file>
|
<file>images/settingscategory_python@2x.png</file>
|
||||||
|
<file>images/qtforpython_neon.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@@ -139,7 +139,12 @@ def __createProjectHandleQtQuickSelection__(minimumQtVersion):
|
|||||||
# param buildSystem is a string holding the build system selected for the project
|
# param buildSystem is a string holding the build system selected for the project
|
||||||
# param checks turns tests in the function on if set to True
|
# param checks turns tests in the function on if set to True
|
||||||
# param available a list holding the available targets
|
# param available a list holding the available targets
|
||||||
def __selectQtVersionDesktop__(buildSystem, checks, available=None):
|
# param targets a list holding the wanted targets - defaults to all desktop targets if empty
|
||||||
|
# returns checked targets
|
||||||
|
def __selectQtVersionDesktop__(buildSystem, checks, available=None, targets=[]):
|
||||||
|
if len(targets):
|
||||||
|
wanted = targets
|
||||||
|
else:
|
||||||
wanted = Targets.desktopTargetClasses()
|
wanted = Targets.desktopTargetClasses()
|
||||||
checkedTargets = __chooseTargets__(wanted, available)
|
checkedTargets = __chooseTargets__(wanted, available)
|
||||||
if checks:
|
if checks:
|
||||||
@@ -162,6 +167,7 @@ def __selectQtVersionDesktop__(buildSystem, checks, available=None):
|
|||||||
verifyChecked(cbObject % ("Profile", objectMap.realName(detailsWidget)))
|
verifyChecked(cbObject % ("Profile", objectMap.realName(detailsWidget)))
|
||||||
clickButton(detailsButton)
|
clickButton(detailsButton)
|
||||||
clickButton(waitForObject(":Next_QPushButton"))
|
clickButton(waitForObject(":Next_QPushButton"))
|
||||||
|
return checkedTargets
|
||||||
|
|
||||||
def __createProjectHandleLastPage__(expectedFiles=[], addToVersionControl="<None>", addToProject=None):
|
def __createProjectHandleLastPage__(expectedFiles=[], addToVersionControl="<None>", addToProject=None):
|
||||||
if len(expectedFiles):
|
if len(expectedFiles):
|
||||||
@@ -205,8 +211,10 @@ def __getProjectFileName__(projectName, buildSystem):
|
|||||||
# param checks turns tests in the function on if set to True
|
# param checks turns tests in the function on if set to True
|
||||||
# param addToVersionControl selects the specified VCS from Creator's wizard
|
# param addToVersionControl selects the specified VCS from Creator's wizard
|
||||||
# param buildSystem selects the specified build system from Creator's wizard
|
# param buildSystem selects the specified build system from Creator's wizard
|
||||||
|
# param targets specifies targets that should be checked
|
||||||
|
# returns the checked targets
|
||||||
def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<None>",
|
def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<None>",
|
||||||
buildSystem=None):
|
buildSystem=None, targets=[]):
|
||||||
template = "Qt Widgets Application"
|
template = "Qt Widgets Application"
|
||||||
available = __createProjectOrFileSelectType__(" Application (Qt)", template)
|
available = __createProjectOrFileSelectType__(" Application (Qt)", template)
|
||||||
__createProjectSetNameAndPath__(path, projectName, checks)
|
__createProjectSetNameAndPath__(path, projectName, checks)
|
||||||
@@ -229,7 +237,7 @@ def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<N
|
|||||||
|
|
||||||
clickButton(waitForObject(":Next_QPushButton"))
|
clickButton(waitForObject(":Next_QPushButton"))
|
||||||
__createProjectHandleTranslationSelection__()
|
__createProjectHandleTranslationSelection__()
|
||||||
__selectQtVersionDesktop__(buildSystem, checks, available)
|
checkedTargets = __selectQtVersionDesktop__(buildSystem, checks, available, targets)
|
||||||
|
|
||||||
expectedFiles = []
|
expectedFiles = []
|
||||||
if checks:
|
if checks:
|
||||||
@@ -243,6 +251,7 @@ def createProject_Qt_GUI(path, projectName, checks=True, addToVersionControl="<N
|
|||||||
waitForProjectParsing()
|
waitForProjectParsing()
|
||||||
if checks:
|
if checks:
|
||||||
__verifyFileCreation__(path, expectedFiles)
|
__verifyFileCreation__(path, expectedFiles)
|
||||||
|
return checkedTargets
|
||||||
|
|
||||||
# Creates a Qt Console project
|
# Creates a Qt Console project
|
||||||
# param path specifies where to create the project
|
# param path specifies where to create the project
|
||||||
|
@@ -8,8 +8,13 @@ def main():
|
|||||||
if not startedWithoutPluginError():
|
if not startedWithoutPluginError():
|
||||||
return
|
return
|
||||||
projectName = "DesignerTestApp"
|
projectName = "DesignerTestApp"
|
||||||
createProject_Qt_GUI(tempDir(), projectName,
|
# explicitly chose new kit to avoid compiler issues on Windows
|
||||||
buildSystem="qmake" if JIRA.isBugStillOpen(28787) else "CMake")
|
targets = createProject_Qt_GUI(tempDir(), projectName, buildSystem="CMake",
|
||||||
|
targets=[Targets.DESKTOP_6_2_4])
|
||||||
|
if len(targets) != 1:
|
||||||
|
earlyExit()
|
||||||
|
return
|
||||||
|
|
||||||
invokeMenuItem('Build', 'Build Project "%s"' % projectName)
|
invokeMenuItem('Build', 'Build Project "%s"' % projectName)
|
||||||
selectFromLocator("mainwindow.ui")
|
selectFromLocator("mainwindow.ui")
|
||||||
dragAndDrop(waitForObject("{container=':qdesigner_internal::WidgetBoxCategoryListView'"
|
dragAndDrop(waitForObject("{container=':qdesigner_internal::WidgetBoxCategoryListView'"
|
||||||
|
Reference in New Issue
Block a user