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

Change-Id: I7a79ed9b966e49395550283b7b8e083cc9dd43b3
This commit is contained in:
Tim Jenssen
2025-03-17 15:45:08 +01:00
26 changed files with 172 additions and 47 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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:

View File

@@ -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)

View File

@@ -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):

View File

@@ -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):

View File

@@ -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(

View File

@@ -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

View File

@@ -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

View File

@@ -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,

View File

@@ -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)

View File

@@ -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;

View File

@@ -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);
} }
} }
}); });

View File

@@ -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)

View File

@@ -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

View File

@@ -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;

View File

@@ -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());

View File

@@ -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;
} }

View File

@@ -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");

View File

@@ -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

View 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.