玉兔远程控制 0.0.34
载入中...
搜索中...
未找到
ConnecterPlayer.cpp
1// Author: Kang Lin <kl222@126.com>
2
3#include <QLoggingCategory>
4#include "ConnecterPlayer.h"
5#include "ConnectPlayer.h"
6#include "DlgPlayer.h"
7#include "PluginClient.h"
8
9static Q_LOGGING_CATEGORY(log, "Player.Connecter")
10
12 : CConnecterThread(plugin)
13{
14 qDebug(log) << Q_FUNC_INFO;
15}
16
17CConnecterPlayer::~CConnecterPlayer()
18{
19 qDebug(log) << Q_FUNC_INFO;
20}
21
23{
24 return 0;
25}
26
28{
29 qDebug(log) << Q_FUNC_INFO;
30 int nRet = 0;
31
32 nRet = SetParameter(&m_Parameters);
33 if(nRet) return nRet;
34
35 bool check = false;
36#if HAVE_QVideoWidget
37 check = connect(&m_Player, SIGNAL(sigViewerFocusIn(QWidget*)),
38 this, SIGNAL(sigViewerFocusIn(QWidget*)));
39 Q_ASSERT(check);
40#endif
42
43 return nRet;
44}
45
46int CConnecterPlayer::InitialMenu()
47{
48 bool check = false;
49 int nRet = 0;
50
51#if HAVE_QT6_RECORD
52 m_pRecord = new QAction(
53 QIcon::fromTheme("media-record"), tr("Record"), &m_Menu);
54 m_pRecord->setCheckable(true);
55 check = connect(m_pRecord, SIGNAL(toggled(bool)),
56 this, SLOT(slotRecord(bool)));
57 Q_ASSERT(check);
58
59 m_pRecordPause = new QAction(
60 QIcon::fromTheme("media-playback-pause"), tr("Record pause"), &m_Menu);
61 m_pRecordPause->setCheckable(true);
62 m_pRecordPause->setEnabled(false);
63 check = connect(m_pRecordPause, SIGNAL(toggled(bool)),
64 this, SIGNAL(sigRecordPause(bool)));
65 Q_ASSERT(check);
66#endif
67
68 m_pScreenShot = new QAction(QIcon::fromTheme("camera-photo"),
69 tr("ScreenShot"), &m_Menu);
70 check = connect(m_pScreenShot, SIGNAL(triggered()),
71 this, SLOT(slotScreenShot()));
72 Q_ASSERT(check);
73
74#ifdef HAVE_QVideoWidget
75 m_Menu.addAction(m_Player.m_paStart);
76 check = connect(this, &CConnecterPlayer::sigConnected,
77 m_Player.m_paStart, &QAction::toggle);
78 Q_ASSERT(check);
79 check = connect(m_Player.m_paStart, SIGNAL(toggled(bool)),
80 this, SIGNAL(sigStart(bool)));
81 Q_ASSERT(check);
82
83 m_Menu.addAction(m_Player.m_paPause);
84 check = connect(m_Player.m_paPause, SIGNAL(toggled(bool)),
85 this, SIGNAL(sigPause(bool)));
86 Q_ASSERT(check);
87
88#if HAVE_QT6_RECORD
89 m_Menu.addAction(m_Player.m_paRecord);
90 check = connect(m_Player.m_paRecord, SIGNAL(toggled(bool)),
91 m_pRecord ,SIGNAL(toggled(bool)));
92 Q_ASSERT(check);
93
94 m_Menu.addAction(m_Player.m_paRecordPause);
95 check = connect(m_Player.m_paRecordPause, SIGNAL(toggled(bool)),
96 m_pRecordPause, SIGNAL(toggled(bool)));
97 Q_ASSERT(check);
98#endif
99
100 m_Menu.addAction(m_Player.m_paScreenShot);
101 check = connect(m_Player.m_paScreenShot, &QAction::triggered,
102 m_pScreenShot, &QAction::triggered);
103 Q_ASSERT(check);
104
105 m_Menu.addSeparator();
106
107 m_Menu.addAction(m_Player.m_paSettings);
108 check = connect(m_Player.m_paSettings, &QAction::triggered,
109 m_pSettings, &QAction::triggered);
110 Q_ASSERT(check);
111
112 check = connect(this, &CConnecterPlayer::sigConnected,
113 this, [&](){
114 m_Player.SetParameter(&m_Parameters);
115 });
116 Q_ASSERT(check);
117 check = connect(&m_Player, SIGNAL(sigChangePosition(qint64)),
118 this, SIGNAL(sigChangePosition(qint64)));
119 Q_ASSERT(check);
120#else
121 QAction* pStart = m_Menu.addAction(
122 QIcon::fromTheme("media-playback-start"), tr("Start"));
123 pStart->setCheckable(true);
124 check = connect(this, &CConnecterPlayer::sigConnected,
125 pStart, &QAction::toggle);
126 Q_ASSERT(check);
127 check = connect(pStart, &QAction::toggled,
128 this, [&](bool checked){
129 QAction* p = qobject_cast<QAction*>(sender());
130 if(!p) return;
131 if(p->isChecked()) {
132 p->setIcon(QIcon::fromTheme("media-playback-stop"));
133 p->setText(tr("Stop"));
134 m_pPause->setEnabled(true);
135 m_pPause->setChecked(false);
136 m_pScreenShot->setEnabled(true);
137#if HAVE_QT6_RECORD
138 m_pRecord->setEnabled(true);
139 m_pRecord->setChecked(false);
140 m_pRecordPause->setEnabled(true);
141 m_pRecordPause->setChecked(false);
142#endif
143 } else {
144 p->setIcon(QIcon::fromTheme("media-playback-start"));
145 p->setText(tr("Start"));
146 m_pPause->setEnabled(false);
147 m_pPause->setChecked(false);
148 m_pScreenShot->setEnabled(false);
149#if HAVE_QT6_RECORD
150 m_pRecord->setEnabled(false);
151 m_pRecord->setChecked(false);
152 m_pRecordPause->setEnabled(false);
153 m_pRecordPause->setChecked(false);
154#endif
155 }
156 emit sigStart(checked);
157 });
158 Q_ASSERT(check);
159 m_pPause = m_Menu.addAction(
160 QIcon::fromTheme("media-playback-pause"), tr("pause"));
161 m_pPause->setCheckable(true);
162 check = connect(m_pPause, SIGNAL(toggled(bool)),
163 this, SIGNAL(sigPause(bool)));
164 Q_ASSERT(check);
165#if HAVE_QT6_RECORD
166 m_Menu.addAction(m_pRecord);
167 m_Menu.addAction(m_pRecordPause);
168#endif
169 m_Menu.addAction(m_pScreenShot);
170 m_Menu.addSeparator();
171 m_Menu.addAction(m_pSettings);
172#endif
173 return nRet;
174}
175
177{
178 qDebug(log) << Q_FUNC_INFO;
179 int nRet = 0;
181 return nRet;
182}
183
185{
186 QDialog* pDlg = new CDlgPlayer(&m_Parameters, parent);
187 return pDlg;
188}
189
191{
192 CConnect* p = new CConnectPlayer(this);
193 return p;
194}
195
196void CConnecterPlayer::slotScreenShot()
197{
198 emit sigScreenShot();
199}
200
201#if HAVE_QVideoWidget
203{
204 return &m_Player;
205}
206
207QVideoSink *CConnecterPlayer::GetVideoSink()
208{
209 return m_Player.videoSink();
210}
211
212void CConnecterPlayer::slotPositionChanged(qint64 pos, qint64 duration)
213{
214 m_Player.slotPositionChanged(pos, duration);
215}
216
217void CConnecterPlayer::slotPlaybackError(
218 QMediaPlayer::Error error, const QString &errorString)
219{
220 if(m_Player.m_paStart->isChecked())
221 m_Player.m_paStart->setChecked(false);
222}
223
224void CConnecterPlayer::slotPlaybackStateChanged(QMediaPlayer::PlaybackState state)
225{
226 if(QMediaPlayer::StoppedState == state
227 && m_Player.m_paStart->isChecked())
228 m_Player.m_paStart->setChecked(false);
229}
230
231#if HAVE_QT6_RECORD
232void CConnecterPlayer::slotRecordStateChanged(QMediaRecorder::RecorderState state)
233{
234 if(QMediaRecorder::StoppedState == state
235 && m_Player.m_paRecord->isCheckable())
236 m_Player.m_paRecord->setChecked(false);
237}
238#endif
239
240#endif
连接接口。它由协议插件实现。 它默认启动一个定时器来开启一个非 Qt 事件循环(就是普通的循环处理)。 详见: Connect()、 slotTimeOut()、 OnProcess() 。 当然,它仍...
Definition Connect.h:45
virtual qint16 Version() override
Version
virtual int Clean() override
Clean parameters and resource
virtual CConnect * InstanceConnect() override
新建 CConnect 对象。它的所有者是调用者, 如果调用者不再使用它,调用者必须负责释放它。
virtual QDialog * OnOpenDialogSettings(QWidget *parent) override
得到设置对话框
virtual int Initial() override
Initial parameters and resource
默认启动一个后台线程。实现一个后台线程处理一个连接。 可与插件接口从 CPluginClient 派生的插件一起使用,用于连接是阻塞模型的。
virtual int Initial() override
Initial parameters and resource
virtual int Clean() override
Clean parameters and resource
void sigConnected()
连接成功信号。仅由插件触发。 应用程序需要在此时设置视图属性 Enabled 为 true 。允许接收键盘和鼠标事件
virtual QWidget * GetViewer()=0
得到显示视图
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
客户端插件接口。用于建立 CConnecter 实例,它由协议插件实现。