Media Player Example (ActiveQt)▲
Media Player demonstrates how a Qt application can communicate with embedded ActiveX controls using signals, slots, and the dynamicCall() function.
class
MainWindow : public
QMainWindow
{
Q_OBJECT
public
:
MainWindow();
~
MainWindow();
void
openMedia(const
QString &
amp;mediaUrl);
public
slots:
void
on_mediaPlayer_PlayStateChange(int
newState);
void
on_actionOpen_triggered();
void
on_actionExit_triggered();
void
on_actionAbout_triggered();
void
on_actionAboutQt_triggered();
private
:
void
updateWindowTitle(const
QString &
amp;state);
Ui::
MainWindow m_ui;
}
;
The MainWindow class declares a QMainWindow based user interface, using the Ui::MainWindow class created by Qt Designer. A number of slots are implemented to handle events from user interface elements, including the mediaPlayer object, which is a QAxWidget hosting the Microsoft Media Player ActiveX control.
MainWindow::
MainWindow()
{
m_ui.setupUi(this
);
QSettings settings(QSettings::
IniFormat, QSettings::
UserScope,
QCoreApplication::
organizationName(), QCoreApplication::
applicationName());
const
QByteArray restoredGeometry =
settings.value(QLatin1String(geometryKey)).toByteArray();
if
(restoredGeometry.isEmpty() ||
!
restoreGeometry(restoredGeometry)) {
const
QRect availableGeometry =
QApplication::
desktop()-&
gt;availableGeometry(this
);
const
QSize size =
(availableGeometry.size() *
4
) /
5
;
resize(size);
move(availableGeometry.center() -
QPoint(size.width(), size.height()) /
2
);
}
m_ui.mediaPlayer-&
gt;dynamicCall("enableContextMenu"
, false
);
m_ui.mediaPlayer-&
gt;dynamicCall("stretchToFit"
, true
);
updateWindowTitle(""
);
}
The constructor initializes the user interface, restores a previously saved window geometry, and uses the dynamicCall() function to invoke the APIs implemented by the Microsoft Media Player ActiveX control, to set initial configuration parameters.
void
MainWindow::
on_mediaPlayer_PlayStateChange(int
newState)
{
static
const
QHash&
lt;int
, const
char
*&
gt; stateMapping {
{
1
, "Stopped"
}
,
{
2
, "Paused"
}
,
{
3
, "Playing"
}
,
{
4
, "Scanning Forwards"
}
,
{
5
, "Scanning Backwards"
}
,
{
6
, "Buffering"
}
,
{
7
, "Waiting"
}
,
{
8
, "Media Ended"
}
,
{
9
, "Transitioning"
}
,
{
10
, "Ready"
}
,
{
11
, "Reconnecting"
}
,
}
;
const
char
*
stateStr =
stateMapping.value(newState, ""
);
updateWindowTitle(tr(stateStr));
}
The on_mediaPlayer_PlayStateChange slot handles the signal emitted by the mediaPlayer