Now これは phonon(QT) に基づくシンプルなメディア プレーヤーです。
#include <QApplication>
#include <QWidget>
#include <phonon>
#include <QUrl>
#include <QObject>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *widget = new QWidget;
widget->setWindowTitle("Media Player");
widget->resize(400,400);
Phonon::MediaObject *media = new Phonon::MediaObject;
media->setCurrentSource(Phonon::MediaSource("test.mpg"));
Phonon::VideoWidget *vwidget = new Phonon::VideoWidget(widget);
Phonon::createPath(media, vwidget);
vwidget->setAspectRatio(Phonon::VideoWidget::AspectRatioAuto);
Phonon::AudioOutput *aOutput = new Phonon::AudioOutput(Phonon::VideoCategory);
Phonon::createPath(media, aOutput);
QLabel *label = new QLabel("Volume: ");
Phonon::VolumeSlider *volumeSlider = new Phonon::VolumeSlider;
volumeSlider->setAudioOutput(aOutput);
volumeSlider->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
Phonon::SeekSlider *seekSlider = new Phonon::SeekSlider;
seekSlider->setMediaObject(media);
QHBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(label);
hLayout->addWidget(volumeSlider);
hLayout->addStretch();
QVBoxLayout *vLayout = new QVBoxLayout;
vLayout->addWidget(vwidget);
vLayout->addWidget(seekSlider);
vLayout->addLayout(hLayout);
widget->setLayout(vLayout);
widget->show();
media->play();
return app.exec();
}
そして今、ビデオを再生しているときに、現在のウィジェットにサインを追加したいと考えています。どうすればこれを実装できますか? たとえば、現在のフレームの指定された位置に四角形を追加したい場合。どうすればそれができますか?
Phonon::VideoWidget から派生した MyVideoWidget という名前のクラスを定義します。ちょうどこのような:
class MyVideoWidget : public Phonon::VideoWidget
次に、関数 paintEvent を次のようにオーバーロードします。
void
MyVideoWidget::paintEvent (QPaintEvent * event)
{
Phonon::VideoWidget::paintEvent (event);
QPainter painter (this);
QPen pen;
pen.setJoinStyle(Qt::MiterJoin);
pen.setWidth(5);
pen.setColor(QColor::fromRgb(255,255, 255));
painter.setPen(pen);
painter.drawLine (QPoint (20, 20), QPoint (100, 20));
painter.drawLine (QPoint (20, 100), QPoint (100, 100));
}
しかし、まだうまくいきません...誰か良い考えがありますか?