| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Change-Id: Iee8150f89d809b0b672574b4f5e04c71b3747a4c
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix an issue where the relative paths in the generated
examples-manifest.xml did miss the parent directory, effectively
blocking the examples from being shown in the Qt Creator
Welcome screen.
This broke in commit c403e775f60a, where the exampledirs path
was changed from "../../../examples" to "../../../examples/multimedia"
and "../../../examples/multimediawidgets". This made qdoc miss the
"multimedia" and "multimediawidgets" directories in the generated paths.
To fix this, the patch
* moves all the multimediawidgets examples to multimedia
* sets examplesinstallpath to "multimedia"
The unification of directories is needed because there can be only one
examplesinstallpath per qdoc project.
Fixes: QTBUG-104943
Change-Id: I4d1b1f857563ec23b4d60028ca08d0470ba96298
Reviewed-by: Nicholas Bennett <nicholas.bennett@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit c3081f86f4fc53509d853a2b88aff88df8c55d87)
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: Ia4c6852e061f56a9783f244f523c71507d6628e2
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I2f0f8f0a74a109e5f8fd20afd1c6572a236860cc
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I7bf1d918d28a0876dcec15b06028ec2b9d56d85a
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I7bbe69fddd120458e5b907ac14bd7306523f9be5
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I54db2e2a957baefafb866dc7b106c1faa0d5b6c7
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
| |
As one comment already says: We don't advise them anymore. Then
let's not advertise them.
Change-Id: Ided3a4b1c98d5d240dfc69c1df05ede4f38be227
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit b52f792019e3f1e101edef07156c1eaf4a0ba220)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
| |
Change-Id: I19698e272d3bee46bfb6a48e016616220a0709e4
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 2cfde35340ff344ac7c04fa8dd6c7ee4cd6c9ba9)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
| |
Set a correct output playback rate to the audio resampler.
The functionality will be tested after implementation mocks of audio output.
Task-number: QTBUG-105617
Change-Id: Iaed95ac12e5e75b55b2c09245aad45c32a885fdf
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 5393dae58ed62ec765abfb846dcd33a7b2aaaac6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Briefly, this kind of deadlock occurs when one thread locks
mutex A and then mutex B, whereas other thread locks B and then A.
By the design, the problem in the code is following:
ClockController::setPlaybackRate (locks mutex A) =>
Renderer::setPlaybackRate (locks mutex B), renderer is a thread.
ClockController::setPaused (locks mutex A) =>
Renderer::setPaused (locks mutex B)
and
Thread::run (locks mutex B) =>
AudioRenderer::loop => ClockController::timeUpdated (locks mutex A)
Thread::run (locks mutex B) =>
AudioRenderer::loop => ClockController::currentTime (locks mutex A)
The deadlock was reproduced pretty easy,
it was enough to change the plaback rate a few times while playing.
The solution is to protect by mutex A only data
that can be accessed from threads.
Clocks creation, removal and iteration are expected from
the main thread, so we don't have to synchronize them.
Clock *m_master can be read from threads,
so it has been refactored as atomic.
A stress test for this case has been implemented,
see codereview 428720.
Note, the fix doesn't fix all threading problems
in this design (the mentioned test has found new ones),
so the design is to be refactored in order to make it safe and clear.
Current solution is sufficient for 6.4.
Task-number: QTBUG-105521
Change-Id: Ic8b9a158ecee3ee5f0d5249a283bbc024b57d31c
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 483e8fc375cadaff414550585fcf64d6d29bd50c)
|
|
|
|
|
|
|
|
| |
Fixes: QTBUG-105344
Change-Id: I1fd4e8e9a640e6a592345a94c40e3e739182d136
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit acb9093864c7c4530919d9bf69223b0d9010b739)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Handle sound volume changing signal.
2. Handle muted state of audio output instead of auto-muting flag.
3. Dont't use auto-muting for playback rates out of range [0.5; 2.].
Checked: other backends don't do it as well.
Auto-muting is a user's responsibility.
Note, it's pretty hard to implement tests for it now,
since audio output is not mocked,
and ffmpeg part is to be refactored after 6.4.
Task-number: QTBUG-105619
Change-Id: I51a2f353275d4ba3c1dc4678e34f0b31f1030264
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit c9fb537f3687e9cbe3c86c8ea8704db27007d81f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Don't try to dereference a non-existing buffer
when we run out of data, but simply fill in
the rest of the buffer with zeroes.
This fixes a crash introduced in change
c2b5a17851f7f240c39ab0305e91fa7c77612fae.
Change-Id: I4b25a9bbd2654fa71cc57eb68b5c5df40bbe2074
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
(cherry picked from commit 3e68011d1b042e151010aec66aeb4408763a8244)
Reviewed-by: Andy Nichols <andy.nichols@qt.io>
|
|
|
|
|
|
|
|
| |
Fixes: QTBUG-105819
Change-Id: Ib81afd95047af64d2e08f054fed1230acde7395f
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 557c2996e0a8fbef3a7c34f4b653a72b867eb2bd)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I2791920351eafb78456498856c0f78833e144908
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In the case when the media session stops immediately after starting,
we can get into a situation where it is still active (m_active == true).
This is because QWindowsMediaDeviceSession::handleStreamingStarted() is
called through the event loop because the corresponding signal
is emitted from another thread. To fix the problem we need to handle
this signal only in "activating" state and ignore otherwise.
Change-Id: Ifb40158861885bbdd9cc847efefd6de1c442601e
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
(cherry picked from commit 35c0beaeea49a53574bfb3a9f998c59a34d9c161)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When executing the first pullSource() on the timer timeout,
the caller of start() could call close() before pullSource().
Since pullSource updates the state the close() would just return
and the timer would run pullSource() soon after. Calling
pullSource() avoids this problem as it immediatelly updates
the state.
Change-Id: Ib6dc2bb0cb15aa4eaa03e384615e57afada0eae6
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
(cherry picked from commit e6f57072dfa59d0dec9e1adfc9a5fa60564468d8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
| |
Failing to set the flag wasActiveSession when session is activating
causes session deactivation when the encoder stops in function
QWindowsMediaEncoder::stop(). This can be observed in tests when
recording commences soon after the session is activated.
Change-Id: Id72dbbc7be808803edc059530a93a8c4554c9f6e
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
(cherry picked from commit 424350beaeb1c60638bc44f9d8ad8c20217225d8)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
| |
The m_sessionWasActive value is set when recording starts; thus,
we can use it only after recording has started.
This is m_state != StoppedState.
Change-Id: Ib855fa694478bbd093633e18035294284518eec1
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
(cherry picked from commit 85177882cc3e0f4b8968df0aaa20925ad64172df)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There is no need to list camera video formats that cannot be used.
This breaks tests that expect all enlisted formats to be valid.
This patch fixes a memory leak on the mediaFormat variable that was
released only once after the whole loop was run.
Change-Id: I6b3322a0547318a989067fea40ccc96b7d43cdcf
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
(cherry picked from commit 920b27fad2bac874c70deae01a546c6412dd1470)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: Id77421f8b2f5eaf24cac6b0f08dd1de50af5f862
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
| |
Change-Id: Iaa0060e6ef1b747269a9c3235a0aa33311a8ba6c
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 8ded9091e8c638a03d48ed731a6bb84c5876594f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
| |
Change-Id: I1139fd51af8fd9b503f7b3910114e2247148c79c
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 8947f5f268b166bd9625536698164d7026b65661)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The patch was incorrect, as the shader-based conversion always
generates RGBA images, while the CPU-based conversion can generate
other formats. It caused, for instance, images to be captured from
the camera with the wrong colors. Also adjusting
tst_QVideoFrame::image() accordingly.
This reverts commit 80871c952a009be6b35a912d946d63b78d5d06b4.
Change-Id: Iadfb9a391bb7a3290e604a8ac13803cb4f0d2e87
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit c173807a7da112451cf459c70e6aac1686ee09f7)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
| |
qtnamespacemacros.h was renamed to qtconfigmacros.h.
Change-Id: I12cbbc3d984db40c289c7dea1810e90a2d4c8f1c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit 135ddc183f41e70575e892379df3cca8ea60d340)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The cropping info associated with HEVC-encoded video files was not
being applied and as a result some videos could show garbage on
the borders of the actual video contents, since instead of the
source frames width and height, the sizes in pixels of the buffers
used by the encoding algorithm, which are padded to multiples of
some power of two, were used.
Root cause seems to be a bug in Media Foundation or incompatibility
with the Windows HEVC decoder, as the API is returning buffer sizes
where sizes of actual video contents should be returned. It works
as expected for other video formats.
This patch makes the QtMultimedia decoder enforce the actual video
dimensions obtained through the file's metadata.
Fixes: QTBUG-105381
Change-Id: I2d67c64f07de489edd1d274060eccd5a4d69bafe
Reviewed-by: Piotr Srebrny <piotr.srebrny@qt.io>
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 65345a04c67c585c4d38d56cb1416a3033434aaf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
| |
Always validate the array length before accessing the elements.
Otherwise, we get ASSERT from the QList that exit() the tests without
indicating the failure point (which occurred to me).
Change-Id: I66a79b8b90261836cec1dfc18bd0719008cefb9c
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit e613d48299508189bdb2dd5e4f51ed13b866cc5f)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
| |
Change-Id: I7a5a1f622a9c85c0300f2cbe4f018ffbb0d91598
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 21adb9f88d8e92035304b2d6a7c943752ae935f4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I4c5773dc1cce219b2ee253f0d67134fada6238c7
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: Idfd64495a8f07521a41c08592c2e7e1ec0642f9e
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
With QVideoWidget window can go fullscreen either by calling
setFullScreen or directly QWidget::showFullScreen. However, a variable
describing window state is only updated when using setFullScreen
function, which becomes inconsisten when using QWidget::showNormal
when going out of full screen mode. This patch fixes this inconsistency
and test tst_QVideoWidget::fullScreen().
Change-Id: I82c496fcd32fda6a32f928564d2502073faf0064
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 5b3a09b84aa80d02cf3f0fc63d273b49af24faba)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
| |
During refactoring of QPlatformMediaDevices, the list of system cameras
has been moved to QPlatformIntegration. However, this has not been done
for the mock, which this patch completes.
Change-Id: Ibe51a2c4bbb2ef3d31f10f9eff231238acb8bdad
Reviewed-by: Lars Knoll <lars@knoll.priv.no>
(cherry picked from commit 6e238e9130f7f3665aab459c194994d1f20513d1)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: Ie8ca6939a19a0946ce60440a0843f2c46cf5c3cb
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
| |
Fixes: QTBUG-103660
Change-Id: Ie0379b2ccfdf9f3e4f93fd88b4fe349beefdb356
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
(cherry picked from commit bd5a2098a6ce2773c0b9770afb81db1e374cf04e)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: Ib172f0192fead8f51d5d90c2917300f40cbb6dbe
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I5ae0fc5f1d8cb9ecc22b6307d987c41b59ad4628
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Wasm by default, is not threaded, so moveToThread does not work as
intended.
The asserts were removed as not needed and of course, asserting, as
moveToThread does not work.
Fixes: QTBUG-104045
Change-Id: I7bda8288e5c9ea16d57b714b8cba9e57018058e5
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
(cherry picked from commit 99b2dd29862e95108356fcde7242a382df7ccf91)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
| |
This commit amends 05b505645ec41106174bab5dfa5a8a7dcca4553c and
44b1526cf98c23b0c8d5c82e48dad479944d7b00
Task-number: QTBUG-105513
Change-Id: Ic1c217235b85e13f78d75e6fcb5bbb8d9968a8ab
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit c2765f62f99b21c1bcba2e9a098048e8d037bfd2)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
From API review:
- use consistent deprecation versions (6.4 vs. 6.0)
- QT_DEPRECATED_SINCE what's deprecated
Change-Id: I48b80305637595962a9cdd61e139fa01d0fac827
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit 44b1526cf98c23b0c8d5c82e48dad479944d7b00)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
| |
textureHandle and rhiTexture should only be use internally
and we can get access to those from QAbstractVideoBuffer
Change-Id: Ifad8a3c533b3d76a6b97fde5b2e52986bffd1bb8
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
C++17 deprecated, and C++20 removed, the nested pointer, size_type
etc. typedefs in std::allocator. Since C++11, the way to get these
types is to go via allocator_traits, so do that.
This breaks compatibility with C++ < 11.
Change-Id: I13dd257a372af50dd93a8aa8ea3a19b27bea0a5a
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
(cherry picked from commit 6018d96410753dd44dd310f1d45ad908d39f6cfe)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
From API review:
- QObject *parent always comes _last_, any additional ctor arguments
go in front
Also make the default ctor non-explicit (so = {} works to invoke it).
Change-Id: I5db7c1bcbda023edb781757648c0e46eb0e4d3af
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 18d1b7b8ce632d131286cfec3ffe6d047eb52d9d)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts CMakeLists.txt changes from
commit 731e6b6f510b01e496860a208d304789aa72fca3. After this
revert qtmultimedia is build even QT_FEATURE_thread is not set.
Reason for revert: QTBUG-105299
Change-Id: Ia20c74fcead4297206332a3fdce46648dc443a8b
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
(cherry picked from commit 41773428670b38d3a351ddee2ee6cad69344a2b4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I6718d1e5bbf547f6c03d6ff42135f2c24ebccbe8
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch simplifies use of QWindowsPointer when returning empty
pointer. By providing implicit constructor for empty pointer we can
avoid length QWindowsPointer<T>{} syntax when returing empty pointer
instead we can write {}. It also simplifies default construction of
objects with QWindowsPointer.
Pick-to: 6.3
Change-Id: I35869e950b13d96aaefb1d0cce9bccf03b14b621
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is required for QML examples that include audio files.
This has two parts. One is letting relative urls map to qrc:// for
spatial audio when the QML file is in qrc. The other is to support
qrc:// URLs in QAudioEngine.
Change-Id: Ide3fdee1503eb6782029306bfa4399946f27b130
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
(cherry picked from commit 399a538ff7601022e716e17fe2bd70fe0b256f48)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I6cc68ae217ca6e8d9641bd6067a9185e4d3dac9a
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|
|
|
|
|
|
|
| |
Change-Id: I914911f07feed1a996c0596b7acc63a7e3a11fd3
Reviewed-by: Lars Knoll <lars.knoll@gmail.com>
(cherry picked from commit ddc9ba4172dc8175a32c41f8e16d5d2a777919d6)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
|
|
|
|
| |
Change-Id: I0dffb14dd923e81e3720fd2e27de88e1f87c4975
Reviewed-by: Qt Submodule Update Bot <qt_submodule_update_bot@qt-project.org>
|