forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/16.0' into qds/dev
Change-Id: I7a79ed9b966e49395550283b7b8e083cc9dd43b3
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
set(IDE_VERSION "16.0.0") # The IDE version.
|
set(IDE_VERSION "16.0.1") # The IDE version.
|
||||||
set(IDE_VERSION_COMPAT "16.0.0") # The IDE Compatibility version.
|
set(IDE_VERSION_COMPAT "16.0.0") # The IDE Compatibility version.
|
||||||
set(IDE_VERSION_DISPLAY "16.0.0") # The IDE display version.
|
set(IDE_VERSION_DISPLAY "16.0.1") # The IDE display version.
|
||||||
|
|
||||||
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
|
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
|
||||||
set(IDE_DISPLAY_NAME "Qt Creator") # The IDE display name.
|
set(IDE_DISPLAY_NAME "Qt Creator") # The IDE display name.
|
||||||
|
@@ -240,7 +240,7 @@
|
|||||||
\li \uicontrol {Use CDB console}
|
\li \uicontrol {Use CDB console}
|
||||||
\li If a console application does not start up properly in the configured
|
\li If a console application does not start up properly in the configured
|
||||||
console and the subsequent attach fails, diagnose the issue by
|
console and the subsequent attach fails, diagnose the issue by
|
||||||
using CDB's native console. Select this checkbox to override the
|
using the native CDB console. Select this checkbox to override the
|
||||||
console set in the Windows system environment variables. Note that
|
console set in the Windows system environment variables. Note that
|
||||||
the native console does not prompt on application exit.
|
the native console does not prompt on application exit.
|
||||||
\row
|
\row
|
||||||
|
@@ -282,7 +282,7 @@
|
|||||||
|
|
||||||
If a console application does not start up properly in the configured
|
If a console application does not start up properly in the configured
|
||||||
console and the subsequent attach fails, you can diagnose the issue by
|
console and the subsequent attach fails, you can diagnose the issue by
|
||||||
using CDB's native console. Go to \preferences >
|
using the native CDB console. Go to \preferences >
|
||||||
\uicontrol Debugger > \uicontrol CDB > \uicontrol {Use CDB console} to
|
\uicontrol Debugger > \uicontrol CDB > \uicontrol {Use CDB console} to
|
||||||
override the console set in the Windows system environment variables.
|
override the console set in the Windows system environment variables.
|
||||||
Note that the native console does not prompt on application exit.
|
Note that the native console does not prompt on application exit.
|
||||||
|
@@ -461,7 +461,7 @@
|
|||||||
\inlineimage icons/refactormarker.png
|
\inlineimage icons/refactormarker.png
|
||||||
\row
|
\row
|
||||||
\li Convert Function Call to Qt Meta-Method Invocation
|
\li Convert Function Call to Qt Meta-Method Invocation
|
||||||
\li Converts an invokable function call into a meta method
|
\li Converts an invocable function call into a meta method
|
||||||
invocation. This applies to signals and slots in general,
|
invocation. This applies to signals and slots in general,
|
||||||
as well as functions explicitly marked with \c Q_INVOKABLE.
|
as well as functions explicitly marked with \c Q_INVOKABLE.
|
||||||
For example, for the following class:
|
For example, for the following class:
|
||||||
@@ -499,7 +499,7 @@
|
|||||||
}
|
}
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
The quick fix also works on invokable methods outside the class that are
|
The quick fix also works on invocable methods outside the class that are
|
||||||
visible from the location where they are called from. For example, it
|
visible from the location where they are called from. For example, it
|
||||||
rewrites
|
rewrites
|
||||||
|
|
||||||
|
@@ -20,8 +20,7 @@
|
|||||||
|
|
||||||
\note Since \QDS 2.3.0, \QDS project wizard templates generate projects that
|
\note Since \QDS 2.3.0, \QDS project wizard templates generate projects that
|
||||||
can be built with CMake. You can open the \e CMakeLists.txt project file in
|
can be built with CMake. You can open the \e CMakeLists.txt project file in
|
||||||
Qt Creator to continue developing the project. Also, you can use Qt Creator
|
Qt Creator to continue developing the project.
|
||||||
to create a Qt Quick Application project that you can open in \QDS.
|
|
||||||
|
|
||||||
\target wizard-template-note
|
\target wizard-template-note
|
||||||
\note Since \QDS 3.9.0, \QDS project wizard templates generate projects that
|
\note Since \QDS 3.9.0, \QDS project wizard templates generate projects that
|
||||||
@@ -54,12 +53,12 @@
|
|||||||
show the main QML file when the application starts.
|
show the main QML file when the application starts.
|
||||||
|
|
||||||
\if defined(qtcreator)
|
\if defined(qtcreator)
|
||||||
The \e {Qt Quick Designer Components} module is installed when you
|
The \e {Qt Quick Studio Components} module is installed when you
|
||||||
install \QDS. If you use Qt Quick Studio Components or Effects
|
install \QDS. If you use Qt Quick Studio Components or Effects
|
||||||
from the module in a project that you want to edit in Qt Creator,
|
from the module in a project that you want to edit in Qt Creator,
|
||||||
you have to build the module and install it to your Qt to be able to
|
you have to build the module and install it to your Qt to be able to
|
||||||
build your project. For more information, see
|
build your project. For more information, see
|
||||||
\l{Adding Qt Quick Designer Components to Qt Installations}.
|
\l{Adding Qt Quick Studio Components to Qt Installations}.
|
||||||
|
|
||||||
The \l{Qt Quick Timeline} module is installed when you install \QDS.
|
The \l{Qt Quick Timeline} module is installed when you install \QDS.
|
||||||
If you only install Qt Creator and Qt, remember to also select the
|
If you only install Qt Creator and Qt, remember to also select the
|
||||||
@@ -110,7 +109,7 @@
|
|||||||
project.
|
project.
|
||||||
|
|
||||||
\note If you get error messages related to modules, perfom the steps
|
\note If you get error messages related to modules, perfom the steps
|
||||||
described in \l{Adding Qt Quick Designer Components to Qt Installations}.
|
described in \l{Adding Qt Quick Studio Components to Qt Installations}.
|
||||||
\endlist
|
\endlist
|
||||||
|
|
||||||
For example, if you copy the source files of the \e ProgressBar
|
For example, if you copy the source files of the \e ProgressBar
|
||||||
@@ -142,7 +141,7 @@
|
|||||||
using the Qt resource system dynamically. For more information, see
|
using the Qt resource system dynamically. For more information, see
|
||||||
\l{The Qt Resource System}.
|
\l{The Qt Resource System}.
|
||||||
|
|
||||||
\section1 Adding Qt Quick Designer Components to Qt Installations
|
\section1 Adding Qt Quick Studio Components to Qt Installations
|
||||||
|
|
||||||
Since \QDS 3.9, the Qt Quick Studio Components module is installed by default
|
Since \QDS 3.9, the Qt Quick Studio Components module is installed by default
|
||||||
as part of the application created with \QDS. You can also install the module manually.
|
as part of the application created with \QDS. You can also install the module manually.
|
||||||
@@ -154,7 +153,7 @@
|
|||||||
git clone https://code.qt.io/qt-labs/qtquickdesigner-components.git
|
git clone https://code.qt.io/qt-labs/qtquickdesigner-components.git
|
||||||
\endcode
|
\endcode
|
||||||
|
|
||||||
\li Install the Qt Quick Designer Components module.
|
\li Install the Qt Quick Studio Components module.
|
||||||
|
|
||||||
\badcode
|
\badcode
|
||||||
mkdir build
|
mkdir build
|
||||||
|
@@ -369,7 +369,7 @@
|
|||||||
\li \l {git branch}
|
\li \l {git branch}
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Copy <hash>}
|
\li \uicontrol {Copy <hash>}
|
||||||
\li Copy the commit's <hash> to the clipboard.
|
\li Copy the commit <hash> to the clipboard.
|
||||||
\li
|
\li
|
||||||
\row
|
\row
|
||||||
\li \uicontrol {Describe Change <hash>}
|
\li \uicontrol {Describe Change <hash>}
|
||||||
@@ -1005,7 +1005,7 @@
|
|||||||
|
|
||||||
In the \uicontrol {Git Branches} view, right-click a remote branch, and
|
In the \uicontrol {Git Branches} view, right-click a remote branch, and
|
||||||
then select a merge option in the context menu. If the commit you are merging
|
then select a merge option in the context menu. If the commit you are merging
|
||||||
can be reached by following the first commit's history, there is no divergent
|
can be reached by following the history of the first commit, there is no divergent
|
||||||
work to merge together. To allow Git to move the branch pointer forward,
|
work to merge together. To allow Git to move the branch pointer forward,
|
||||||
select \uicontrol {Merge <remote branch> into <local branch> (Fast-Forward)}.
|
select \uicontrol {Merge <remote branch> into <local branch> (Fast-Forward)}.
|
||||||
If you do not want to fast-forward the branch, select
|
If you do not want to fast-forward the branch, select
|
||||||
|
@@ -4,10 +4,10 @@ import qbs.FileInfo
|
|||||||
import qbs.Utilities
|
import qbs.Utilities
|
||||||
|
|
||||||
Module {
|
Module {
|
||||||
property string qtcreator_display_version: '16.0.0'
|
property string qtcreator_display_version: '16.0.1'
|
||||||
property string ide_version_major: '16'
|
property string ide_version_major: '16'
|
||||||
property string ide_version_minor: '0'
|
property string ide_version_minor: '0'
|
||||||
property string ide_version_release: '0'
|
property string ide_version_release: '1'
|
||||||
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
|
property string qtcreator_version: ide_version_major + '.' + ide_version_minor + '.'
|
||||||
+ ide_version_release
|
+ ide_version_release
|
||||||
|
|
||||||
|
@@ -130,7 +130,7 @@ class Dumper(DumperBase):
|
|||||||
val.typeid = self.from_native_type(nativeValue.type())
|
val.typeid = self.from_native_type(nativeValue.type())
|
||||||
val.nativeValue = nativeValue
|
val.nativeValue = nativeValue
|
||||||
val.laddress = nativeValue.address()
|
val.laddress = nativeValue.address()
|
||||||
val.lbitsize = nativeValue.bitsize()
|
val.size = nativeValue.bitsize()
|
||||||
return val
|
return val
|
||||||
|
|
||||||
def nativeTypeId(self, nativeType: cdbext.Type) -> str:
|
def nativeTypeId(self, nativeType: cdbext.Type) -> str:
|
||||||
|
@@ -3004,6 +3004,8 @@ typename))
|
|||||||
return
|
return
|
||||||
|
|
||||||
self.putAddress(value.address())
|
self.putAddress(value.address())
|
||||||
|
if value.size is not None:
|
||||||
|
self.putField('size', value.size // 8)
|
||||||
|
|
||||||
if typecode == TypeCode.Function:
|
if typecode == TypeCode.Function:
|
||||||
#self.warn('FUNCTION VALUE: %s' % value)
|
#self.warn('FUNCTION VALUE: %s' % value)
|
||||||
|
@@ -276,6 +276,7 @@ class Dumper(DumperBase):
|
|||||||
val.typeid = typeid
|
val.typeid = typeid
|
||||||
#elif code == gdb.TYPE_CODE_ARRAY:
|
#elif code == gdb.TYPE_CODE_ARRAY:
|
||||||
# val.type.ltarget = nativeValue[0].type.unqualified()
|
# val.type.ltarget = nativeValue[0].type.unqualified()
|
||||||
|
val.size = nativeType.sizeof * 8
|
||||||
return val
|
return val
|
||||||
|
|
||||||
def nativeDataFromValueFallback(self, nativeValue, size):
|
def nativeDataFromValueFallback(self, nativeValue, size):
|
||||||
|
@@ -207,6 +207,7 @@ class Dumper(DumperBase):
|
|||||||
val.summary = summary
|
val.summary = summary
|
||||||
val.lIsInScope = nativeValue.IsInScope()
|
val.lIsInScope = nativeValue.IsInScope()
|
||||||
val.name = nativeValue.GetName()
|
val.name = nativeValue.GetName()
|
||||||
|
val.size = nativeType.GetByteSize() * 8
|
||||||
return val
|
return val
|
||||||
|
|
||||||
def nativeListMembers(self, value, nativeType, include_base):
|
def nativeListMembers(self, value, nativeType, include_base):
|
||||||
|
@@ -1134,6 +1134,11 @@ void MarkdownBrowser::setEnableCodeCopyButton(bool enable)
|
|||||||
access(this)->setEnableCodeCopyButton(enable);
|
access(this)->setEnableCodeCopyButton(enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MarkdownBrowser::setViewportMargins(int left, int top, int right, int bottom)
|
||||||
|
{
|
||||||
|
access(this)->setMargins(QMargins(left, top, right, bottom));
|
||||||
|
}
|
||||||
|
|
||||||
// Special If
|
// Special If
|
||||||
|
|
||||||
If::If(
|
If::If(
|
||||||
|
@@ -460,6 +460,7 @@ public:
|
|||||||
void setMarkdown(const QString &);
|
void setMarkdown(const QString &);
|
||||||
void setBasePath(const Utils::FilePath &);
|
void setBasePath(const Utils::FilePath &);
|
||||||
void setEnableCodeCopyButton(bool enable);
|
void setEnableCodeCopyButton(bool enable);
|
||||||
|
void setViewportMargins(int left, int top, int right, int bottom);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Special
|
// Special
|
||||||
|
@@ -69,7 +69,7 @@ Suggested NDK and Debugger version per Qt version:
|
|||||||
| 5.15.9 - 5.15.16 | 6.2 - 6.3 | 22.1.7171670 | 8.3.0 | 11.0.5 |
|
| 5.15.9 - 5.15.16 | 6.2 - 6.3 | 22.1.7171670 | 8.3.0 | 11.0.5 |
|
||||||
| | 6.4 | 23.1.7779620 | 8.3.0 | 12.0.8 |
|
| | 6.4 | 23.1.7779620 | 8.3.0 | 12.0.8 |
|
||||||
| | 6.5 - 6.6 | 25.1.8937393 | | 14.0.6 |
|
| | 6.5 - 6.6 | 25.1.8937393 | | 14.0.6 |
|
||||||
| | 6.7 - 6.8 | 26.1.10909125 | | 17.0.2 |
|
| | 6.7 - 6.9 | 26.1.10909125 | | 17.0.2 |
|
||||||
|
|
||||||
< Qt 6.5: Mapping read from sdk_definitions.json
|
< Qt 6.5: Mapping read from sdk_definitions.json
|
||||||
>= Qt 6.5: Mapping read from <QtDir>/modules/Core.json
|
>= Qt 6.5: Mapping read from <QtDir>/modules/Core.json
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include <coreplugin/findplaceholder.h>
|
#include <coreplugin/findplaceholder.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
|
#include <utils/stylehelper.h>
|
||||||
#include <utils/utilsicons.h>
|
#include <utils/utilsicons.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
@@ -119,6 +120,7 @@ Console::Console()
|
|||||||
m_spacer->setMinimumWidth(30);
|
m_spacer->setMinimumWidth(30);
|
||||||
|
|
||||||
m_statusLabel = new QLabel(m_consoleWidget);
|
m_statusLabel = new QLabel(m_consoleWidget);
|
||||||
|
StyleHelper::setPanelWidget(m_statusLabel);
|
||||||
|
|
||||||
readSettings();
|
readSettings();
|
||||||
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
|
connect(Core::ICore::instance(), &Core::ICore::saveSettingsRequested,
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
#include <coreplugin/modemanager.h>
|
#include <coreplugin/modemanager.h>
|
||||||
|
|
||||||
#include <utils/basetreeview.h>
|
#include <utils/basetreeview.h>
|
||||||
|
#include <utils/stylehelper.h>
|
||||||
#include <utils/treemodel.h>
|
#include <utils/treemodel.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
@@ -138,6 +139,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_proxyModel->setSourceModel(sourceModel);
|
m_proxyModel->setSourceModel(sourceModel);
|
||||||
|
|
||||||
|
StyleHelper::setPanelWidget(m_engineChooser);
|
||||||
m_engineChooser->setModel(m_proxyModel);
|
m_engineChooser->setModel(m_proxyModel);
|
||||||
m_engineChooser->setIconSize(QSize(0, 0));
|
m_engineChooser->setIconSize(QSize(0, 0));
|
||||||
if (hideSwitcherUnlessNeeded)
|
if (hideSwitcherUnlessNeeded)
|
||||||
|
@@ -1228,6 +1228,7 @@ void QmlEnginePrivate::handleEvaluateExpression(const QVariantMap &response,
|
|||||||
QVariant bodyVal = response.value(BODY).toMap();
|
QVariant bodyVal = response.value(BODY).toMap();
|
||||||
QmlV8ObjectData body = extractData(bodyVal);
|
QmlV8ObjectData body = extractData(bodyVal);
|
||||||
WatchHandler *watchHandler = engine->watchHandler();
|
WatchHandler *watchHandler = engine->watchHandler();
|
||||||
|
watchHandler->resetValueCache();
|
||||||
|
|
||||||
auto item = new WatchItem;
|
auto item = new WatchItem;
|
||||||
item->iname = iname;
|
item->iname = iname;
|
||||||
|
@@ -36,6 +36,11 @@ enum {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool sorter(const TreeItem *a, const TreeItem *b)
|
||||||
|
{
|
||||||
|
return a->data(0, Qt::DisplayRole).toString() < b->data(0, Qt::DisplayRole).toString();
|
||||||
|
}
|
||||||
|
|
||||||
template<class Item, class Params, class Request, class Result>
|
template<class Item, class Params, class Request, class Result>
|
||||||
class HierarchyItem : public TreeItem
|
class HierarchyItem : public TreeItem
|
||||||
{
|
{
|
||||||
@@ -102,7 +107,7 @@ private:
|
|||||||
if (result && !result->isNull()) {
|
if (result && !result->isNull()) {
|
||||||
for (const Result &item : result->toList()) {
|
for (const Result &item : result->toList()) {
|
||||||
if (item.isValid())
|
if (item.isValid())
|
||||||
appendChild(new HierarchyItem(getSourceItem(item), m_client));
|
insertOrderedChild(new HierarchyItem(getSourceItem(item), m_client), sorter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -115,6 +115,7 @@ CREATE_HAS_FUNC(setFixedSize, QSize())
|
|||||||
CREATE_HAS_FUNC(setVisible, bool())
|
CREATE_HAS_FUNC(setVisible, bool())
|
||||||
CREATE_HAS_FUNC(setIcon, Utils::Icon());
|
CREATE_HAS_FUNC(setIcon, Utils::Icon());
|
||||||
CREATE_HAS_FUNC(setContentsMargins, int(), int(), int(), int());
|
CREATE_HAS_FUNC(setContentsMargins, int(), int(), int(), int());
|
||||||
|
CREATE_HAS_FUNC(setViewportMargins, int(), int(), int(), int());
|
||||||
CREATE_HAS_FUNC(setCursor, Qt::CursorShape())
|
CREATE_HAS_FUNC(setCursor, Qt::CursorShape())
|
||||||
CREATE_HAS_FUNC(setMinimumWidth, int());
|
CREATE_HAS_FUNC(setMinimumWidth, int());
|
||||||
CREATE_HAS_FUNC(setEnableCodeCopyButton, bool());
|
CREATE_HAS_FUNC(setEnableCodeCopyButton, bool());
|
||||||
@@ -128,6 +129,12 @@ void setProperties(std::unique_ptr<T> &item, const sol::table &children, QObject
|
|||||||
item->setContentsMargins(margins->left(), margins->top(), margins->right(), margins->bottom());
|
item->setContentsMargins(margins->left(), margins->top(), margins->right(), margins->bottom());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if constexpr (has_setViewportMargins<T>) {
|
||||||
|
sol::optional<QMargins> margins = children.get<sol::optional<QMargins>>("viewportMargins"sv);
|
||||||
|
if (margins)
|
||||||
|
item->setViewportMargins(margins->left(), margins->top(), margins->right(), margins->bottom());
|
||||||
|
}
|
||||||
|
|
||||||
if constexpr (has_setCursor<T>) {
|
if constexpr (has_setCursor<T>) {
|
||||||
const auto cursor = children.get<sol::optional<Qt::CursorShape>>("cursor"sv);
|
const auto cursor = children.get<sol::optional<Qt::CursorShape>>("cursor"sv);
|
||||||
if (cursor)
|
if (cursor)
|
||||||
|
@@ -232,6 +232,7 @@ local markdownBrowser = {}
|
|||||||
|
|
||||||
---@class (exact) MarkdownBrowserOptions : WidgetOptions
|
---@class (exact) MarkdownBrowserOptions : WidgetOptions
|
||||||
---@field enableCodeCopyButton? boolean Enable or disable the code copy button
|
---@field enableCodeCopyButton? boolean Enable or disable the code copy button
|
||||||
|
---@field viewportMargins? integer[] Four integers representing left, top, right and bottom margins
|
||||||
local markdownBrowserOptions = {}
|
local markdownBrowserOptions = {}
|
||||||
|
|
||||||
---@param options MarkdownBrowserOptions
|
---@param options MarkdownBrowserOptions
|
||||||
|
@@ -594,7 +594,7 @@ void RunControlPrivate::startPortsGathererIfNeededAndContinueStart()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTC_ASSERT(device, continueStart(); return);
|
QTC_ASSERT(device, initiateStop(); return);
|
||||||
|
|
||||||
const Storage<PortsOutputData> portsStorage;
|
const Storage<PortsOutputData> portsStorage;
|
||||||
|
|
||||||
|
@@ -78,6 +78,7 @@ private:
|
|||||||
QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
|
QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
|
||||||
: RunConfiguration(target, id)
|
: RunConfiguration(target, id)
|
||||||
{
|
{
|
||||||
|
setUsesEmptyBuildKeys();
|
||||||
qmlViewer.setSettingsKey(Constants::QML_VIEWER_KEY);
|
qmlViewer.setSettingsKey(Constants::QML_VIEWER_KEY);
|
||||||
qmlViewer.setLabelText(Tr::tr("Override device QML viewer:"));
|
qmlViewer.setLabelText(Tr::tr("Override device QML viewer:"));
|
||||||
qmlViewer.setPlaceHolderText(qmlRuntimeFilePath().toUserOutput());
|
qmlViewer.setPlaceHolderText(qmlRuntimeFilePath().toUserOutput());
|
||||||
|
@@ -156,9 +156,6 @@ GroupItem GenericDeployStep::transferTask(const Storage<FilesToTransfer> &storag
|
|||||||
.arg(FileTransfer::transferMethodName(preferredTransferMethod),
|
.arg(FileTransfer::transferMethodName(preferredTransferMethod),
|
||||||
FileTransfer::transferMethodName(transferMethod),
|
FileTransfer::transferMethodName(transferMethod),
|
||||||
deviceConfiguration()->displayName());
|
deviceConfiguration()->displayName());
|
||||||
if (transferMethod == FileTransferMethod::GenericCopy)
|
|
||||||
addWarningMessage(message);
|
|
||||||
else
|
|
||||||
addProgressMessage(message);
|
addProgressMessage(message);
|
||||||
m_emittedDowngradeWarning = true;
|
m_emittedDowngradeWarning = true;
|
||||||
}
|
}
|
||||||
|
@@ -137,18 +137,6 @@ bool CropSizeWarningIcon::needsWarning() const
|
|||||||
|
|
||||||
namespace FFmpegUtils {
|
namespace FFmpegUtils {
|
||||||
|
|
||||||
static QVersionNumber parseVersionNumber(const QByteArray &toolOutput)
|
|
||||||
{
|
|
||||||
QVersionNumber result;
|
|
||||||
const QJsonObject jsonObject = QJsonDocument::fromJson(toolOutput).object();
|
|
||||||
if (const QJsonObject program_version = jsonObject.value("program_version").toObject();
|
|
||||||
!program_version.isEmpty()) {
|
|
||||||
if (const QJsonValue version = program_version.value("version"); !version.isUndefined())
|
|
||||||
result = QVersionNumber::fromString(version.toString());
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ClipInfo parseClipInfo(const QByteArray &toolOutput)
|
static ClipInfo parseClipInfo(const QByteArray &toolOutput)
|
||||||
{
|
{
|
||||||
ClipInfo result;
|
ClipInfo result;
|
||||||
@@ -248,6 +236,18 @@ using namespace ScreenRecorder::FFmpegUtils;
|
|||||||
|
|
||||||
namespace ScreenRecorder::Internal {
|
namespace ScreenRecorder::Internal {
|
||||||
|
|
||||||
|
static QVersionNumber parseVersionNumber(const QByteArray &toolOutput)
|
||||||
|
{
|
||||||
|
QVersionNumber result;
|
||||||
|
const QJsonObject jsonObject = QJsonDocument::fromJson(toolOutput).object();
|
||||||
|
if (const QJsonObject program_version = jsonObject.value("program_version").toObject();
|
||||||
|
!program_version.isEmpty()) {
|
||||||
|
if (const QJsonValue version = program_version.value("version"); !version.isUndefined())
|
||||||
|
result = QVersionNumber::fromString(version.toString());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void FFmpegOutputParserTest::testVersionParser_data()
|
void FFmpegOutputParserTest::testVersionParser_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<QByteArray>("ffprobeVersionOutput");
|
QTest::addColumn<QByteArray>("ffprobeVersionOutput");
|
||||||
|
@@ -1,6 +1,49 @@
|
|||||||
|
# Testing Boot2Qt with the Hardware Pool
|
||||||
|
|
||||||
|
## Installing the Requirements
|
||||||
|
|
||||||
### Testing Boot2Qt setup without hardware ###
|
On macOS, you need to have Docker Desktop installed, including the Docker CLI.
|
||||||
|
|
||||||
|
Install the Boot to Qt Software Stack for the Qt version and device hardware
|
||||||
|
that you want to test with the Qt Online Installer
|
||||||
|
|
||||||
|
On macOS, the installer might complain about not being able to run docker.
|
||||||
|
If that is the case, copy the command line from the dialog into a Terminal
|
||||||
|
with the Docker CLI in PATH and execute it manually. Choose `Ignore` in the
|
||||||
|
installer dialog when ready.
|
||||||
|
|
||||||
|
## Reserving a Device
|
||||||
|
|
||||||
|
Log into https://hw-controller.qt.io/ with your Qt Account. Choose the
|
||||||
|
appropriate device hardware, select the Qt version that matches what you
|
||||||
|
installed with the Qt Online Installer, state a reason for your device use,
|
||||||
|
choose a reservation duration, and select `Reserve`.
|
||||||
|
|
||||||
|
The device is then provisioned and booted. When ready, make note of the device
|
||||||
|
IP address.
|
||||||
|
|
||||||
|
## Configuring Qt Creator
|
||||||
|
|
||||||
|
Start Qt Creator, open the device options, and add a `Boot to Qt Device`.
|
||||||
|
Give it a name, and provide the IP that you noted when reserving the device.
|
||||||
|
The user is `root`.
|
||||||
|
|
||||||
|
Now you can open or create a project, select the corresponding Boot to Qt kit,
|
||||||
|
and build, run & debug.
|
||||||
|
|
||||||
|
While an application is running on the device, you can use a VNC[^vnc] viewer to
|
||||||
|
connect to the apps UI with the device's IP.
|
||||||
|
|
||||||
|
[^vnc]: The creation of the VNC connection depends on setting
|
||||||
|
`QT_QPA_PLATFORM=vnc` in `/etc/default/qt` on the device. That should
|
||||||
|
be enabled by default for devices created with the web interface.
|
||||||
|
|
||||||
|
## Releasing the Device
|
||||||
|
|
||||||
|
When you are finished with testing, release the reservation of the device
|
||||||
|
in the web interface.
|
||||||
|
|
||||||
|
# Testing Boot2Qt setup without hardware ###
|
||||||
|
|
||||||
It is possible to test Boot2Qt without hardware on a plain Linux host system.
|
It is possible to test Boot2Qt without hardware on a plain Linux host system.
|
||||||
|
|
||||||
@@ -8,12 +51,12 @@ Note: You need an ssh-accessible "root" user on the machine, open X access,
|
|||||||
and must be willing to use it. This is not meant for production environments!
|
and must be willing to use it. This is not meant for production environments!
|
||||||
|
|
||||||
|
|
||||||
# Prepare your machine
|
## Prepare your machine
|
||||||
|
|
||||||
ssh-copy-id -i ~/.ssh/id_??????.pub root@localhost
|
ssh-copy-id -i ~/.ssh/id_??????.pub root@localhost
|
||||||
xhost +
|
xhost +
|
||||||
|
|
||||||
# Get appcontroller source and build
|
## Get appcontroller source and build
|
||||||
|
|
||||||
git clone ssh://codereview.qt-project.org/qt-apps/boot2qt-appcontroller
|
git clone ssh://codereview.qt-project.org/qt-apps/boot2qt-appcontroller
|
||||||
|
|
||||||
@@ -21,12 +64,12 @@ cd boot2qt-appcontroller
|
|||||||
/path/to/qt-base/bin/qt-cmake ...
|
/path/to/qt-base/bin/qt-cmake ...
|
||||||
ninja ...
|
ninja ...
|
||||||
|
|
||||||
# Copy binary to "proper" location
|
## Copy binary to "proper" location
|
||||||
|
|
||||||
sudo ln -s `pwd`/appcontroller /usr/bin/appcontroller
|
sudo ln -s `pwd`/appcontroller /usr/bin/appcontroller
|
||||||
|
|
||||||
|
|
||||||
# Set up "Boot to Qt" Device in Creator
|
## Set up "Boot to Qt" Device in Creator
|
||||||
|
|
||||||
Ensure the "Boot to Qt" plugin is enabled
|
Ensure the "Boot to Qt" plugin is enabled
|
||||||
|
|
||||||
@@ -36,7 +79,7 @@ Device Address: 127.0.0.1
|
|||||||
|
|
||||||
Press "Apply"
|
Press "Apply"
|
||||||
|
|
||||||
# Create a suitable Kit
|
## Create a suitable Kit
|
||||||
|
|
||||||
Clone your standard kit for normal local work
|
Clone your standard kit for normal local work
|
||||||
Change the "Run Device" to LocalHostForBoot2Qt
|
Change the "Run Device" to LocalHostForBoot2Qt
|
||||||
@@ -46,11 +89,11 @@ Press "Apply"
|
|||||||
|
|
||||||
The kit will have a warning the "Device type is not supported by Qt version" - that's ok.
|
The kit will have a warning the "Device type is not supported by Qt version" - that's ok.
|
||||||
|
|
||||||
# Create a test project
|
## Create a test project
|
||||||
|
|
||||||
File -> New Project -> Qt Quick Application
|
File -> New Project -> Qt Quick Application
|
||||||
|
|
||||||
# Tweak project settings
|
## Tweak project settings
|
||||||
|
|
||||||
Deployment method: "Deploy to Boot to Qt Target"
|
Deployment method: "Deploy to Boot to Qt Target"
|
||||||
|
|
||||||
@@ -60,12 +103,12 @@ Run Environment: Add LD_LIBRARY_PATH=/path/to/qt-base/lib
|
|||||||
"Executable on Device" may be red at that stage, it shold get black after a successful build
|
"Executable on Device" may be red at that stage, it shold get black after a successful build
|
||||||
|
|
||||||
|
|
||||||
# Build
|
## Build
|
||||||
|
|
||||||
Ctrl-B
|
Ctrl-B
|
||||||
|
|
||||||
|
|
||||||
# Test
|
## Test
|
||||||
|
|
||||||
At that stage, the program should be runnable, debuggable (C++, QML, and combined QML/C++),
|
At that stage, the program should be runnable, debuggable (C++, QML, and combined QML/C++),
|
||||||
and Qml-Profilable
|
and Qml-Profilable
|
||||||
|
57
tests/manual/qnx/README.md
Normal file
57
tests/manual/qnx/README.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
### Testing QNX setup without hardware ###
|
||||||
|
|
||||||
|
It is possible to test QNX without hardware on a plain Linux host system.
|
||||||
|
|
||||||
|
Note: This doc assumes you have:
|
||||||
|
1.1 An access to actual qnx target device available via IP address that has Qt installed.
|
||||||
|
1.2 A QNX SDP
|
||||||
|
1.3 A QNX license (placed under: $HOME/.qnx/license/licenses).
|
||||||
|
|
||||||
|
# Installations
|
||||||
|
|
||||||
|
2.1 Unpack qnx710-windows-linux-20240417.tar.xz in ~/qnx folder.
|
||||||
|
2.2 Install 'chrpath' on your linux host.
|
||||||
|
2.3 Install locally Qt for QNX via Qt installer / maintenance tool.
|
||||||
|
Install matching version of the one that is on the remote device.
|
||||||
|
Point Qt installer to ~/qnx/qnx710-windows-linux-20240417/qnx710 for the SDP dir.
|
||||||
|
2.4 Ensure you have cmake 3.21.1 at minimum installed on your host.
|
||||||
|
|
||||||
|
# Creator configuration
|
||||||
|
|
||||||
|
3.1 Ensure your installed Qt for QNX are detected:
|
||||||
|
Preferences | Kits | Qt Versions should list installed versions.
|
||||||
|
Preferences | Kits | Kits should list installed kits (won't be used!).
|
||||||
|
If not, try: Preferences | Kits | Qt Versions | Link with Qt...
|
||||||
|
and point to the installed Qt for QNX master dir.
|
||||||
|
3.2 Create QNX device, pointing to the IP address from 1.1:
|
||||||
|
Preferences | Devices | Add | QNX Device
|
||||||
|
3.3 Run device Test - it should already pass.
|
||||||
|
3.4 Ensure the right "Access via" value for the created QNX device:
|
||||||
|
it should be: Direct (not Local PC).
|
||||||
|
3.4 Add QNX SDK:
|
||||||
|
Preferences | SDKs | QNX | Add...
|
||||||
|
Point into ~/qnx/qnx710-windows-linux-20240417/qnx710/qnxsdp-env.sh
|
||||||
|
This should fill the QNX page with content and you should see 3 new buttons:
|
||||||
|
Create Kit for aarch64le, Create Kit for x86_64 and Create Kit for armle-v7.
|
||||||
|
3.5 Create a kit: press one of the buttons from the previous point.
|
||||||
|
Ensure it matches the architecture of the remote device.
|
||||||
|
You won't see any feedback, but when you switch to the Kits | Kits tab,
|
||||||
|
you should see a new kit created.
|
||||||
|
3.6 It might happen that the created kit doesn't have matching
|
||||||
|
compiler/debugger/Qt version selected. Ensure they have something like:
|
||||||
|
Compiler: QCC for x86_64 - qnx7 (64-bit ARM)
|
||||||
|
Debugger: Debugger for QNX 7.1.0 ARMv8
|
||||||
|
Qt version: Qt 6.8.2 for QNX 7.1 ARMv8
|
||||||
|
|
||||||
|
# Create a qnx project
|
||||||
|
|
||||||
|
4.1 Try creating a new project:
|
||||||
|
File | New Project... | Application (Qt) | Qt Console Application
|
||||||
|
and select the Kit created in point 3.5
|
||||||
|
4.2 Go to project run settings and fill up the "Alternate executable on device:" field.
|
||||||
|
Check "Use this command instead" on the right side first to enable the line.
|
||||||
|
Fill it with "/tmp/bin/[your_target_name]" by typing.
|
||||||
|
This should match the table in the "Deployment" section above.
|
||||||
|
Don't worry that it stays red, indicating it's not an existing path.
|
||||||
|
4.3 The project should build, deploy and run on remote now.
|
||||||
|
|
Reference in New Issue
Block a user