Fix tray visibility and message reception issues
- Disable sound initialization to prevent hanging
- Add missing import re in utils.py
- Fix settings loading for QSettings
- Update file paths to use PROJECT_ROOT
- Revert to working API paths and listener from commit efdc63e
This commit is contained in:
@@ -0,0 +1,419 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
|
||||
|
||||
import QtQuick
|
||||
import QtMultimedia
|
||||
|
||||
/*!
|
||||
\qmltype Video
|
||||
\inherits Item
|
||||
\ingroup multimedia_qml
|
||||
\ingroup multimedia_video_qml
|
||||
\inqmlmodule QtMultimedia
|
||||
\brief A convenience type for showing a specified video.
|
||||
|
||||
\c Video is a convenience type combining the functionality
|
||||
of a \l MediaPlayer and a \l VideoOutput into one. It provides
|
||||
simple video playback functionality without having to declare multiple
|
||||
types.
|
||||
|
||||
The following is sample code to implement video playback in a scene.
|
||||
|
||||
\qml
|
||||
Video {
|
||||
id: video
|
||||
width : 800
|
||||
height : 600
|
||||
source: "video.avi"
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
video.play()
|
||||
}
|
||||
}
|
||||
|
||||
focus: true
|
||||
Keys.onSpacePressed: video.playbackState == MediaPlayer.PlayingState ? video.pause() : video.play()
|
||||
Keys.onLeftPressed: video.position = video.position - 5000
|
||||
Keys.onRightPressed: video.position = video.position + 5000
|
||||
}
|
||||
\endqml
|
||||
|
||||
The source file, \c video.avi, plays when you click the parent
|
||||
of MouseArea. The video plays in an area of 800 by 600 pixels, and its \c id
|
||||
property has the value \b{video}.
|
||||
|
||||
Notice that because signals for the \l Keys have been defined pressing the:
|
||||
\list
|
||||
\li \uicontrol Spacebar toggles the pause button.
|
||||
\li \uicontrol{Left Arrow} moves the current position in the video to 5 seconds
|
||||
previously.
|
||||
\li \uicontrol{Right Arrow} advances the current position in the video by 5 seconds.
|
||||
\endlist
|
||||
|
||||
Video supports un-transformed, stretched, and uniformly scaled
|
||||
video presentation. For a description of stretched uniformly scaled
|
||||
presentation, see the \l fillMode property description.
|
||||
|
||||
\sa MediaPlayer, VideoOutput
|
||||
|
||||
\omit
|
||||
\section1 Screen Saver
|
||||
|
||||
If it is likely that an application will be playing video for an extended
|
||||
period of time without user interaction, it may be necessary to disable
|
||||
the platform's screen saver. The \l ScreenSaver (from \l QtSystemInfo)
|
||||
may be used to disable the screensaver in this fashion:
|
||||
|
||||
\qml
|
||||
import QtSystemInfo 5.0
|
||||
|
||||
ScreenSaver { screenSaverEnabled: false }
|
||||
\endqml
|
||||
\endomit
|
||||
*/
|
||||
|
||||
// TODO: Restore Qt System Info docs when the module is released
|
||||
|
||||
Item {
|
||||
id: video
|
||||
implicitWidth: videoOut.implicitWidth
|
||||
implicitHeight: videoOut.implicitHeight
|
||||
|
||||
/*** Properties of VideoOutput ***/
|
||||
/*!
|
||||
\qmlproperty enumeration Video::fillMode
|
||||
|
||||
Set this property to define how the video is scaled to fit the target
|
||||
area.
|
||||
|
||||
\list
|
||||
\li VideoOutput.Stretch - the video is scaled to fit
|
||||
\li VideoOutput.PreserveAspectFit - the video is scaled uniformly to fit without
|
||||
cropping
|
||||
\li VideoOutput.PreserveAspectCrop - the video is scaled uniformly to fill, cropping
|
||||
if necessary
|
||||
\endlist
|
||||
|
||||
Because this type is for convenience in QML, it does not
|
||||
support enumerations directly, so enumerations from \c VideoOutput are
|
||||
used to access the available fill modes.
|
||||
|
||||
The default fill mode is preserveAspectFit.
|
||||
*/
|
||||
property alias fillMode: videoOut.fillMode
|
||||
|
||||
/*!
|
||||
\qmlproperty enumeration Video::endOfStreamPolicy
|
||||
\since 6.9
|
||||
|
||||
This property specifies the policy to apply when the video stream ends.
|
||||
|
||||
The \c endOfStreamPolicy can be one of:
|
||||
|
||||
\value ClearOutput The video output is cleared.
|
||||
\value KeepLastFrame The video output continues displaying the last
|
||||
frame. Use the method \l clearOutput() to
|
||||
clear the output manually.
|
||||
|
||||
The default value is \c VideoOutput.ClearOutput.
|
||||
*/
|
||||
property alias endOfStreamPolicy: videoOut.endOfStreamPolicy
|
||||
|
||||
/*!
|
||||
\qmlproperty int Video::orientation
|
||||
\since 6.9
|
||||
|
||||
This property determines the angle, in degrees, at which the displayed video
|
||||
is rotated clockwise in video coordinates, where the Y-axis points
|
||||
downwards on the display.
|
||||
The orientation transformation is applied before \l mirrored.
|
||||
|
||||
Only multiples of \c 90 degrees are supported, that is 0, 90, -90, 180, 270, etc.,
|
||||
otherwise, the specified value is ignored.
|
||||
|
||||
The default value is \c 0.
|
||||
*/
|
||||
property alias orientation: videoOut.orientation
|
||||
|
||||
|
||||
/*!
|
||||
\qmlproperty int Video::mirrored
|
||||
|
||||
Determines whether the displayed video is mirrored around its vertical axis.
|
||||
The mirroring is applied after \l orientation.
|
||||
The default value is \c false.
|
||||
*/
|
||||
property alias mirrored: videoOut.mirrored
|
||||
|
||||
|
||||
/*** Properties of MediaPlayer ***/
|
||||
|
||||
/*!
|
||||
\qmlproperty enumeration Video::playbackState
|
||||
|
||||
This read only property indicates the playback state of the media.
|
||||
|
||||
\list
|
||||
\li MediaPlayer.PlayingState - the media is playing
|
||||
\li MediaPlayer.PausedState - the media is paused
|
||||
\li MediaPlayer.StoppedState - the media is stopped
|
||||
\endlist
|
||||
|
||||
The default state is MediaPlayer.StoppedState.
|
||||
*/
|
||||
property alias playbackState: player.playbackState
|
||||
|
||||
/*!
|
||||
\qmlproperty real Video::bufferProgress
|
||||
|
||||
This property holds how much of the data buffer is currently filled,
|
||||
from 0.0 (empty) to 1.0
|
||||
(full).
|
||||
*/
|
||||
property alias bufferProgress: player.bufferProgress
|
||||
|
||||
/*!
|
||||
\qmlproperty int Video::duration
|
||||
|
||||
This property holds the duration of the media in milliseconds.
|
||||
|
||||
If the media doesn't have a fixed duration (a live stream for example)
|
||||
this will be 0.
|
||||
*/
|
||||
property alias duration: player.duration
|
||||
|
||||
/*!
|
||||
\qmlproperty int Video::loops
|
||||
|
||||
Determines how often the media is played before stopping.
|
||||
Set to MediaPlayer.Infinite to loop the current media file forever.
|
||||
|
||||
The default value is \c 1. Setting this property to \c 0 has no effect.
|
||||
*/
|
||||
property alias loops: player.loops
|
||||
|
||||
/*!
|
||||
\qmlproperty enumeration Video::error
|
||||
|
||||
This property holds the error state of the video. It can be one of:
|
||||
|
||||
\list
|
||||
\li MediaPlayer.NoError - there is no current error.
|
||||
\li MediaPlayer.ResourceError - the video cannot be played due to a problem
|
||||
allocating resources.
|
||||
\li MediaPlayer.FormatError - the video format is not supported.
|
||||
\li MediaPlayer.NetworkError - the video cannot be played due to network issues.
|
||||
\li MediaPlayer.AccessDenied - the video cannot be played due to insufficient
|
||||
permissions.
|
||||
\li MediaPlayer.ServiceMissing - the video cannot be played because the media
|
||||
service could not be
|
||||
instantiated.
|
||||
\endlist
|
||||
*/
|
||||
property alias error: player.error
|
||||
|
||||
/*!
|
||||
\qmlproperty string Video::errorString
|
||||
|
||||
This property holds a string describing the current error condition in more detail.
|
||||
*/
|
||||
property alias errorString: player.errorString
|
||||
|
||||
/*!
|
||||
\qmlproperty bool Video::hasAudio
|
||||
|
||||
This property holds whether the current media has audio content.
|
||||
*/
|
||||
property alias hasAudio: player.hasAudio
|
||||
|
||||
/*!
|
||||
\qmlproperty bool Video::hasVideo
|
||||
|
||||
This property holds whether the current media has video content.
|
||||
*/
|
||||
property alias hasVideo: player.hasVideo
|
||||
|
||||
/*!
|
||||
\qmlproperty mediaMetaData Video::metaData
|
||||
|
||||
This property holds the meta data for the current media.
|
||||
|
||||
See \l{MediaPlayer::metaData}{MediaPlayer.metaData} for details about each meta data key.
|
||||
|
||||
\sa {mediaMetaData}
|
||||
*/
|
||||
property alias metaData: player.metaData
|
||||
|
||||
/*!
|
||||
\qmlproperty bool Video::muted
|
||||
|
||||
This property holds whether the audio output is muted.
|
||||
*/
|
||||
property alias muted: audioOutput.muted
|
||||
|
||||
/*!
|
||||
\qmlproperty real Video::playbackRate
|
||||
|
||||
This property holds the rate at which video is played at as a multiple
|
||||
of the normal rate.
|
||||
*/
|
||||
property alias playbackRate: player.playbackRate
|
||||
|
||||
/*!
|
||||
\qmlproperty int Video::position
|
||||
|
||||
This property holds the current playback position in milliseconds.
|
||||
*/
|
||||
property alias position: player.position
|
||||
|
||||
/*!
|
||||
\qmlproperty bool Video::seekable
|
||||
|
||||
This property holds whether the playback position of the video can be
|
||||
changed.
|
||||
|
||||
If true, calling the \l seek() method or changing the \l position property
|
||||
will cause playback to seek to the new position.
|
||||
*/
|
||||
property alias seekable: player.seekable
|
||||
|
||||
/*!
|
||||
\qmlproperty url Video::source
|
||||
|
||||
This property holds the source URL of the media.
|
||||
*/
|
||||
property alias source: player.source
|
||||
|
||||
/*!
|
||||
\since 6.7
|
||||
\qmlproperty bool Video::autoPlay
|
||||
|
||||
This property controls whether the media begins to play automatically after it gets loaded.
|
||||
Defaults to \c false.
|
||||
*/
|
||||
property alias autoPlay: player.autoPlay
|
||||
|
||||
/*!
|
||||
\qmlproperty real Video::volume
|
||||
|
||||
This property holds the audio volume.
|
||||
|
||||
The volume is scaled linearly from \c 0.0 (silence) to \c 1.0
|
||||
(full volume). Values outside this range will be clamped.
|
||||
|
||||
The default volume is \c 1.0.
|
||||
|
||||
UI volume controls should usually be scaled nonlinearly. For example,
|
||||
using a logarithmic scale will produce linear changes in perceived
|
||||
loudness, which is what a user would normally expect from a volume
|
||||
control. See \l {QtAudio::convertVolume()} for more details.
|
||||
*/
|
||||
property alias volume: audioOutput.volume
|
||||
|
||||
/*!
|
||||
\qmlsignal Video::paused()
|
||||
|
||||
This signal is emitted when playback is paused.
|
||||
*/
|
||||
signal paused
|
||||
|
||||
/*!
|
||||
\qmlsignal Video::stopped()
|
||||
|
||||
This signal is emitted when playback is stopped.
|
||||
*/
|
||||
signal stopped
|
||||
|
||||
/*!
|
||||
\qmlsignal Video::playing()
|
||||
|
||||
This signal is emitted when playback is started or continued.
|
||||
*/
|
||||
signal playing
|
||||
|
||||
/*!
|
||||
\qmlsignal Video::errorOccurred(error, errorString)
|
||||
|
||||
This signal is emitted when an \a error has occurred. The \a errorString
|
||||
parameter may contain more detailed information about the error.
|
||||
*/
|
||||
signal errorOccurred(int error, string errorString)
|
||||
|
||||
VideoOutput {
|
||||
id: videoOut
|
||||
anchors.fill: video
|
||||
}
|
||||
|
||||
MediaPlayer {
|
||||
id: player
|
||||
onPlaybackStateChanged: function(newState) {
|
||||
if (newState === MediaPlayer.PausedState)
|
||||
video.paused();
|
||||
else if (newState === MediaPlayer.StoppedState)
|
||||
video.stopped();
|
||||
else
|
||||
video.playing();
|
||||
}
|
||||
onErrorOccurred: function(error, errorString) {
|
||||
video.errorOccurred(error, errorString);
|
||||
}
|
||||
videoOutput: videoOut
|
||||
audioOutput: AudioOutput {
|
||||
id: audioOutput
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod Video::play()
|
||||
|
||||
Starts playback of the media.
|
||||
*/
|
||||
function play() {
|
||||
player.play();
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod Video::pause()
|
||||
|
||||
Pauses playback of the media.
|
||||
*/
|
||||
function pause() {
|
||||
player.pause();
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod Video::stop()
|
||||
|
||||
Stops playback of the media.
|
||||
*/
|
||||
function stop() {
|
||||
player.stop();
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod Video::seek(offset)
|
||||
|
||||
If the \l seekable property is true, seeks the current
|
||||
playback position to \a offset.
|
||||
|
||||
\sa seekable, position
|
||||
*/
|
||||
function seek(offset) {
|
||||
player.position = offset;
|
||||
}
|
||||
|
||||
/*!
|
||||
\qmlmethod Video::clearOutput()
|
||||
\since 6.9
|
||||
|
||||
Clears the video output by removing the current video frame.
|
||||
This method is recommended when you need to remove the last video frame after
|
||||
the video stream ends with the \l endOfStreamPolicy Video property
|
||||
set to \c KeepLastFrame.
|
||||
*/
|
||||
function clearOutput() {
|
||||
videoOut.clearOutput();
|
||||
}
|
||||
}
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,11 @@
|
||||
module QtMultimedia
|
||||
linktarget Qt6::quickmultimedia
|
||||
plugin quickmultimediaplugin
|
||||
classname QMultimediaQuickModule
|
||||
typeinfo plugins.qmltypes
|
||||
depends QtQuick
|
||||
prefer :/qt-project.org/imports/QtMultimedia/
|
||||
Video 6.0 Video.qml
|
||||
Video 5.0 Video.qml
|
||||
depends QtQuick
|
||||
|
||||
Reference in New Issue
Block a user