Skip to content

Commit 0838369

Browse files
committed
Plugins::Player: add hide tool bar
1 parent 0214467 commit 0838369

12 files changed

Lines changed: 317 additions & 129 deletions

File tree

‎Plugins/Player/DlgPlayer.cpp‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ CDlgPlayer::CDlgPlayer(CParameterPlayer *pPara, QWidget *parent)
8383
m_pRecordUI = new CParameterRecordUI(ui->tabWidget);
8484
m_pRecordUI->SetParameter(&m_pParameters->m_Record);
8585
ui->tabWidget->addTab(m_pRecordUI, m_pRecordUI->windowIcon(), m_pRecordUI->windowTitle());
86+
87+
#ifndef HAVE_QVideoWidget
88+
ui->lbHideToolBar->hide();
89+
ui->spHideToolBar->hide();
90+
#endif
91+
ui->spHideToolBar->setValue(m_pParameters->GetHideToolBar());
8692
}
8793

8894
CDlgPlayer::~CDlgPlayer()
@@ -132,6 +138,8 @@ void CDlgPlayer::accept()
132138
break;
133139
}
134140

141+
m_pParameters->SetHideToolBar(ui->spHideToolBar->value());
142+
135143
m_pParameters->SetSubtitle(ui->cbEnableSubtitle->isChecked());
136144
m_pParameters->SetEnableAudioInput(ui->gbAudioInput->isChecked());
137145
m_pParameters->SetAudioInput(ui->cmbAudioInput->currentIndex());

‎Plugins/Player/DlgPlayer.ui‎

Lines changed: 77 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,83 @@
5454
</item>
5555
</layout>
5656
</item>
57+
<item row="1" column="0">
58+
<layout class="QHBoxLayout" name="horizontalLayout">
59+
<item>
60+
<widget class="QComboBox" name="cmbType"/>
61+
</item>
62+
<item>
63+
<widget class="QComboBox" name="cmbCamera">
64+
<property name="sizePolicy">
65+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
66+
<horstretch>0</horstretch>
67+
<verstretch>0</verstretch>
68+
</sizepolicy>
69+
</property>
70+
</widget>
71+
</item>
72+
<item>
73+
<widget class="QLineEdit" name="leUrl"/>
74+
</item>
75+
<item>
76+
<widget class="QPushButton" name="pbUrlBrowse">
77+
<property name="text">
78+
<string>Browse</string>
79+
</property>
80+
</widget>
81+
</item>
82+
</layout>
83+
</item>
84+
<item row="2" column="0">
85+
<layout class="QHBoxLayout" name="horizontalLayout_4">
86+
<item>
87+
<widget class="QLabel" name="lbHideToolBar">
88+
<property name="sizePolicy">
89+
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
90+
<horstretch>0</horstretch>
91+
<verstretch>0</verstretch>
92+
</sizepolicy>
93+
</property>
94+
<property name="text">
95+
<string>Hide play toolbar when full Screen(0: disable)</string>
96+
</property>
97+
</widget>
98+
</item>
99+
<item>
100+
<widget class="QSpinBox" name="spHideToolBar">
101+
<property name="sizePolicy">
102+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
103+
<horstretch>0</horstretch>
104+
<verstretch>0</verstretch>
105+
</sizepolicy>
106+
</property>
107+
<property name="suffix">
108+
<string>S</string>
109+
</property>
110+
<property name="maximum">
111+
<number>999</number>
112+
</property>
113+
<property name="value">
114+
<number>60</number>
115+
</property>
116+
</widget>
117+
</item>
118+
</layout>
119+
</item>
57120
<item row="3" column="0">
121+
<widget class="QCheckBox" name="cbEnableSubtitle">
122+
<property name="sizePolicy">
123+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
124+
<horstretch>0</horstretch>
125+
<verstretch>0</verstretch>
126+
</sizepolicy>
127+
</property>
128+
<property name="text">
129+
<string>Enable subtitle</string>
130+
</property>
131+
</widget>
132+
</item>
133+
<item row="4" column="0">
58134
<layout class="QHBoxLayout" name="horizontalLayout_11">
59135
<item>
60136
<widget class="QGroupBox" name="gbAudioInput">
@@ -141,34 +217,7 @@
141217
</item>
142218
</layout>
143219
</item>
144-
<item row="1" column="0">
145-
<layout class="QHBoxLayout" name="horizontalLayout">
146-
<item>
147-
<widget class="QComboBox" name="cmbType"/>
148-
</item>
149-
<item>
150-
<widget class="QComboBox" name="cmbCamera">
151-
<property name="sizePolicy">
152-
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
153-
<horstretch>0</horstretch>
154-
<verstretch>0</verstretch>
155-
</sizepolicy>
156-
</property>
157-
</widget>
158-
</item>
159-
<item>
160-
<widget class="QLineEdit" name="leUrl"/>
161-
</item>
162-
<item>
163-
<widget class="QPushButton" name="pbUrlBrowse">
164-
<property name="text">
165-
<string>Browse</string>
166-
</property>
167-
</widget>
168-
</item>
169-
</layout>
170-
</item>
171-
<item row="4" column="0">
220+
<item row="5" column="0">
172221
<spacer name="verticalSpacer">
173222
<property name="orientation">
174223
<enum>Qt::Orientation::Vertical</enum>
@@ -181,13 +230,6 @@
181230
</property>
182231
</spacer>
183232
</item>
184-
<item row="2" column="0">
185-
<widget class="QCheckBox" name="cbEnableSubtitle">
186-
<property name="text">
187-
<string>Enable subtitle</string>
188-
</property>
189-
</widget>
190-
</item>
191233
</layout>
192234
</widget>
193235
</widget>

‎Plugins/Player/FrmPlayer.cpp‎

Lines changed: 84 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ CFrmPlayer::CFrmPlayer(QWidget *parent) : QWidget(parent)
4848
, m_pVideoItem(nullptr)
4949
#endif
5050
, m_pToolBar(nullptr)
51+
, tm_ToolBar(this)
5152
, m_pbVideo(Qt::Horizontal, this)
5253
, m_pbVolume(Qt::Horizontal, this)
5354
, m_bMoveVideo(false)
5455
, m_pParameter(nullptr)
5556
, m_pLabel(nullptr)
57+
, m_bFullScreen(false)
5658
{
5759
bool check = false;
5860

@@ -67,11 +69,17 @@ CFrmPlayer::CFrmPlayer(QWidget *parent) : QWidget(parent)
6769
m_pVideoWidget = new QVideoWidget(this);
6870
m_pVideoWidget->setFocusPolicy(Qt::WheelFocus);
6971
m_pVideoWidget->installEventFilter(this);
72+
m_pVideoWidget->setMouseTracking(true);
73+
// ← 遍历内部子对象也装过滤器 + 开 tracking
74+
for (QObject *o : m_pVideoWidget->findChildren<QObject*>()) {
75+
o->installEventFilter(this);
76+
if (auto *w = qobject_cast<QWidget*>(o))
77+
w->setMouseTracking(true);
78+
}
7079
pLayout->addWidget(m_pVideoWidget);
7180
#else
7281
// 创建场景和视频项
7382
QGraphicsScene *pScene = new QGraphicsScene(this);
74-
pScene->installEventFilter(this);
7583
m_pVideoItem = new QGraphicsVideoItem;
7684
pScene->addItem(m_pVideoItem);
7785
// 创建视图并添加到布局
@@ -81,6 +89,9 @@ CFrmPlayer::CFrmPlayer(QWidget *parent) : QWidget(parent)
8189
m_pGraphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
8290
m_pGraphicsView->setFrameStyle(0);
8391
m_pGraphicsView->setBackgroundBrush(Qt::black);
92+
m_pGraphicsView->setMouseTracking(true);
93+
m_pGraphicsView->viewport()->setMouseTracking(true);
94+
m_pGraphicsView->viewport()->installEventFilter(this);
8495
// 关视频尺寸变化时,重新 fitInView
8596
connect(m_pVideoItem, &QGraphicsVideoItem::nativeSizeChanged,
8697
this, [this](const QSizeF &size) {
@@ -262,15 +273,44 @@ void CFrmPlayer::slotPositionChanged(qint64 pos, qint64 duration)
262273
}
263274
}
264275

276+
//! [Full Screen]
277+
int CFrmPlayer::OnFullScreen(bool bFull)
278+
{
279+
int nRet = 0;
280+
m_bFullScreen = bFull;
281+
if(bFull) {
282+
m_Margins = layout()->contentsMargins();
283+
layout()->setContentsMargins(QMargins());
284+
} else {
285+
layout()->setContentsMargins(m_Margins);
286+
}
287+
if(m_pToolBar && m_bFullScreen)
288+
m_pToolBar->hide();
289+
return nRet;
290+
}
291+
//! [Full Screen]
292+
265293
void CFrmPlayer::focusInEvent(QFocusEvent *event)
266294
{
267295
qDebug(log) << Q_FUNC_INFO << event << this;
296+
Q_UNUSED(event)
268297
emit sigViewerFocusIn(this);
269298
}
270299

271300
void CFrmPlayer::focusOutEvent(QFocusEvent *event)
272301
{
273302
qDebug(log) << Q_FUNC_INFO << event << this;
303+
Q_UNUSED(event)
304+
}
305+
306+
void CFrmPlayer::mouseMoveEvent(QMouseEvent *event)
307+
{
308+
//qDebug(log) << Q_FUNC_INFO;
309+
Q_UNUSED(event)
310+
if(m_pToolBar && m_pToolBar->isHidden()) {
311+
m_pToolBar->show();
312+
StartTimer();
313+
}
274314
}
275315

276316
void CFrmPlayer::slotStart(bool bStart)
@@ -289,6 +329,7 @@ void CFrmPlayer::slotStart(bool bStart)
289329
m_paRecordPause->setEnabled(true);
290330
m_paRecordPause->setChecked(false);
291331
#endif
332+
StartTimer();
292333
} else {
293334
p->setIcon(QIcon::fromTheme("media-playback-start"));
294335
p->setText(tr("Start"));
@@ -301,19 +342,44 @@ void CFrmPlayer::slotStart(bool bStart)
301342
m_paRecordPause->setEnabled(false);
302343
m_paRecordPause->setChecked(false);
303344
#endif
345+
tm_ToolBar.stop();
346+
m_pToolBar->show();
347+
}
348+
}
349+
350+
void CFrmPlayer::slotTimeOut()
351+
{
352+
if(!m_pToolBar)
353+
return;
354+
m_pToolBar->hide();
355+
}
356+
357+
void CFrmPlayer::StartTimer()
358+
{
359+
if(m_pParameter && m_pParameter->GetHideToolBar() <= 0
360+
|| !m_bFullScreen)
361+
return;
362+
if(m_paStart->isChecked()) {
363+
tm_ToolBar.stop();
364+
tm_ToolBar.singleShot(m_pParameter->GetHideToolBar() * 1000,
365+
this, SLOT(slotTimeOut()));
304366
}
305367
}
306368

307369
bool CFrmPlayer::eventFilter(QObject *watched, QEvent *event)
308370
{
309371
//qDebug(log) << Q_FUNC_INFO << event;
310372
#ifdef WITH_QVideoWidget
311-
if(m_pVideoWidget == watched)
373+
if(m_pVideoWidget == watched
374+
|| m_pVideoWidget->isAncestorOf(qobject_cast<QWidget*>(watched)))
312375
{
313376
switch(event->type()){
314-
case QEvent::MouseMove:
377+
case QEvent::MouseMove: {
315378
qDebug(log) << "Mouse move";
316-
break;
379+
QMouseEvent* e = (QMouseEvent*)event;
380+
mouseMoveEvent(e);
381+
return true;
382+
}
317383
case QEvent::MouseButtonRelease:
318384
m_paPause->trigger();
319385
break;
@@ -351,6 +417,19 @@ bool CFrmPlayer::eventFilter(QObject *watched, QEvent *event)
351417
}
352418
return true;
353419
}
420+
#else
421+
if(m_pGraphicsView->viewport() == watched) {
422+
switch(event->type()){
423+
case QEvent::MouseMove: {
424+
qDebug(log) << "Mouse move";
425+
QMouseEvent* e = (QMouseEvent*)event;
426+
mouseMoveEvent(e);
427+
return true;
428+
}
429+
default:
430+
break;
431+
}
432+
}
354433
#endif
355434
return false; // 让 widget 自己继续处理
356435
}
@@ -367,4 +446,4 @@ void CFrmPlayer::UpdateGraphicsVideoGeometry()
367446
m_pGraphicsView->setSceneRect(m_pVideoItem->boundingRect());
368447
m_pGraphicsView->fitInView(m_pVideoItem, Qt::KeepAspectRatio);
369448
}
370-
#endif
449+
#endif

‎Plugins/Player/FrmPlayer.h‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include <QSlider>
99
#include <QProgressBar>
1010
#include <QLabel>
11+
#include <QTimer>
12+
#include <QMargins>
1113
#include "ParameterPlayer.h"
1214

1315
#if !defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)
@@ -46,6 +48,7 @@ class CFrmPlayer : public QWidget
4648

4749
public Q_SLOTS:
4850
void slotPositionChanged(qint64 pos, qint64 duration);
51+
4952
Q_SIGNALS:
5053
void sigChangePosition(qint64 pos);
5154
/*!
@@ -58,11 +61,17 @@ public Q_SLOTS:
5861
protected:
5962
virtual void focusInEvent(QFocusEvent *event) override;
6063
virtual void focusOutEvent(QFocusEvent *event) override;
64+
virtual void mouseMoveEvent(QMouseEvent *event) override;
65+
66+
//! Full Screen
67+
Q_INVOKABLE int OnFullScreen(bool bFull);
6168

6269
private Q_SLOTS:
6370
void slotAudioMuted(bool bMuted);
6471
void slotAduioVolume(int volume);
6572
void slotStart(bool bStart);
73+
void slotTimeOut();
74+
void StartTimer();
6675

6776
private:
6877
#ifdef WITH_QVideoWidget
@@ -73,11 +82,14 @@ private Q_SLOTS:
7382
void UpdateGraphicsVideoGeometry();
7483
#endif
7584
QToolBar* m_pToolBar;
85+
QTimer tm_ToolBar;
7686
QSlider m_pbVideo;
7787
bool m_bMoveVideo;
7888
QSlider m_pbVolume;
7989
CParameterPlayer* m_pParameter;
8090
QLabel* m_pLabel;
91+
bool m_bFullScreen;
92+
QMargins m_Margins;
8193
};
8294

8395
#endif // FRMPLAYER_H

‎Plugins/Player/OperatePlayer.cpp‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ int COperatePlayer::Initial()
3434

3535
bool check = false;
3636
#if HAVE_QVideoWidget
37+
m_Player.SetParameter(&m_Parameters);
3738
check = connect(&m_Player, SIGNAL(sigViewerFocusIn(QWidget*)),
3839
this, SIGNAL(sigViewerFocusIn(QWidget*)));
3940
Q_ASSERT(check);
@@ -168,7 +169,7 @@ int COperatePlayer::InitialMenu()
168169
#endif
169170
m_Menu.addAction(m_pScreenShot);
170171
m_Menu.addSeparator();
171-
m_Menu.addAction(m_pActiveSettings);
172+
m_Menu.addAction(GetActionSettings());
172173
#endif
173174
return nRet;
174175
}

0 commit comments

Comments
 (0)