3#include <QLoggingCategory>
4#include "OperatePlayer.h"
5#include "BackendPlayer.h"
9static Q_LOGGING_CATEGORY(log,
"Player.Operate")
14 qDebug(log) << Q_FUNC_INFO;
17COperatePlayer::~COperatePlayer()
19 qDebug(log) << Q_FUNC_INFO;
29 qDebug(log) << Q_FUNC_INFO;
37 m_Player.SetParameter(&m_Parameters);
47int COperatePlayer::InitialMenu()
53 m_pRecord =
new QAction(
54 QIcon::fromTheme(
"media-record"), tr(
"Record"), &m_Menu);
55 m_pRecord->setCheckable(
true);
56 check = connect(m_pRecord, SIGNAL(toggled(
bool)),
57 this, SLOT(slotRecord(
bool)));
60 m_pRecordPause =
new QAction(
61 QIcon::fromTheme(
"media-playback-pause"), tr(
"Record pause"), &m_Menu);
62 m_pRecordPause->setCheckable(
true);
63 m_pRecordPause->setEnabled(
false);
64 check = connect(m_pRecordPause, SIGNAL(toggled(
bool)),
65 this, SIGNAL(sigRecordPause(
bool)));
69 m_pScreenShot =
new QAction(QIcon::fromTheme(
"camera-photo"),
70 tr(
"ScreenShot"), &m_Menu);
71 check = connect(m_pScreenShot, SIGNAL(triggered()),
72 this, SLOT(slotScreenShot()));
75#ifdef HAVE_QVideoWidget
76 m_Menu.addAction(m_Player.m_paStart);
78 m_Player.m_paStart, &QAction::toggle);
80 check = connect(m_Player.m_paStart, SIGNAL(toggled(
bool)),
81 this, SIGNAL(sigStart(
bool)));
84 m_Menu.addAction(m_Player.m_paPause);
85 check = connect(m_Player.m_paPause, SIGNAL(toggled(
bool)),
86 this, SIGNAL(sigPause(
bool)));
90 m_Menu.addAction(m_Player.m_paRecord);
91 check = connect(m_Player.m_paRecord, SIGNAL(toggled(
bool)),
92 m_pRecord ,SIGNAL(toggled(
bool)));
95 m_Menu.addAction(m_Player.m_paRecordPause);
96 check = connect(m_Player.m_paRecordPause, SIGNAL(toggled(
bool)),
97 m_pRecordPause, SIGNAL(toggled(
bool)));
101 m_Menu.addAction(m_Player.m_paScreenShot);
102 check = connect(m_Player.m_paScreenShot, &QAction::triggered,
103 m_pScreenShot, &QAction::triggered);
106 m_Menu.addSeparator();
108 m_Menu.addAction(m_Player.m_paSettings);
109 check = connect(m_Player.m_paSettings, &QAction::triggered,
110 m_pActionSettings, &QAction::triggered);
115 m_Player.SetParameter(&m_Parameters);
118 check = connect(&m_Player, SIGNAL(sigChangePosition(qint64)),
119 this, SIGNAL(sigChangePosition(qint64)));
122 QAction* pStart = m_Menu.addAction(
123 QIcon::fromTheme(
"media-playback-start"), tr(
"Start"));
124 pStart->setCheckable(
true);
126 pStart, &QAction::toggle);
128 check = connect(pStart, &QAction::toggled,
129 this, [&](
bool checked){
130 QAction* p = qobject_cast<QAction*>(sender());
133 p->setIcon(QIcon::fromTheme(
"media-playback-stop"));
134 p->setText(tr(
"Stop"));
135 m_pPause->setEnabled(
true);
136 m_pPause->setChecked(
false);
137 m_pScreenShot->setEnabled(
true);
139 m_pRecord->setEnabled(
true);
140 m_pRecord->setChecked(
false);
141 m_pRecordPause->setEnabled(
true);
142 m_pRecordPause->setChecked(
false);
145 p->setIcon(QIcon::fromTheme(
"media-playback-start"));
146 p->setText(tr(
"Start"));
147 m_pPause->setEnabled(
false);
148 m_pPause->setChecked(
false);
149 m_pScreenShot->setEnabled(
false);
151 m_pRecord->setEnabled(
false);
152 m_pRecord->setChecked(
false);
153 m_pRecordPause->setEnabled(
false);
154 m_pRecordPause->setChecked(
false);
157 emit sigStart(checked);
160 m_pPause = m_Menu.addAction(
161 QIcon::fromTheme(
"media-playback-pause"), tr(
"pause"));
162 m_pPause->setCheckable(
true);
163 check = connect(m_pPause, SIGNAL(toggled(
bool)),
164 this, SIGNAL(sigPause(
bool)));
167 m_Menu.addAction(m_pRecord);
168 m_Menu.addAction(m_pRecordPause);
170 m_Menu.addAction(m_pScreenShot);
171 m_Menu.addSeparator();
172 m_Menu.addAction(GetActionSettings());
179 qDebug(log) << Q_FUNC_INFO;
187 QDialog* pDlg =
new CDlgPlayer(&m_Parameters, parent);
197void COperatePlayer::slotScreenShot()
199 emit sigScreenShot();
208QVideoSink *COperatePlayer::GetVideoSink()
210 return m_Player.videoSink();
213void COperatePlayer::slotPositionChanged(qint64 pos, qint64 duration)
215 m_Player.slotPositionChanged(pos, duration);
218void COperatePlayer::slotPlaybackError(
219 QMediaPlayer::Error error,
const QString &errorString)
221 if(m_Player.m_paStart->isChecked())
222 m_Player.m_paStart->setChecked(
false);
225void COperatePlayer::slotPlaybackStateChanged(QMediaPlayer::PlaybackState state)
227 if(QMediaPlayer::StoppedState == state
228 && m_Player.m_paStart->isChecked())
229 m_Player.m_paStart->setChecked(
false);
233void COperatePlayer::slotRecordStateChanged(QMediaRecorder::RecorderState state)
235 if(QMediaRecorder::StoppedState == state
236 && m_Player.m_paRecord->isCheckable())
237 m_Player.m_paRecord->setChecked(
false);
后端接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Start()、 slotTimeOut()、 OnProcess() 。 当然,它仍然支...
virtual int SetParameter(CParameterDesktop *p)
设置参数指针
virtual int Initial() override
Initial parameters and resource
virtual int Clean() override
Clean parameters and resource
virtual int Clean() override
Clean parameters and resource
virtual const QString Description() override
[The name of the desktop operate]
virtual CBackend * InstanceBackend() override
新建后端实例。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual int Initial() override
Initial parameters and resource
virtual const qint16 Version() const override
[The description of the desktop operate]
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
void sigRunning()
开始成功信号。仅由插件触发。
virtual QWidget * GetViewer()=0
得到显示视图
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
virtual const QString Description()
描述