Я наконец решил свою проблему и решил поделиться своим решением со всеми остальными.В конструкторе класса я инициализирую следующие две переменные:
media = new Phonon::MediaObject(this);
videoWidget = new Phonon::VideoWidget;
Я подключаю сигнал media
к слоту в моем классе:
connect(media,SIGNAL(stateChanged(Phonon::State,Phonon::State)),
this,SLOT(videoState(Phonon::State,Phonon::State)));
Я разрешаю пользователю выбратьвидеофайл:
QString filename = QFileDialog::getOpenFileName(this,tr("Choose video file"),QDir().homePath(),tr("Video files (*.mov *.mpg *.avi)"));
И применить этот файл к объекту media
:
media->setCurrentSource(filename);
Phonon::createPath(media,videoWidget);
Поскольку объект media
уже подключен к слоту, каждое изменение в media
можно контролировать с его помощью.
void VideoModuleDialog::videoState(Phonon::State newState, Phonon::State oldState)
{
if(newState == Phonon::PlayingState || newState == Phonon::StoppedState)
{
width->setText(QString().number(videoWidget->sizeHint().width()));
height->setText(QString().number(videoWidget->sizeHint().height()));
}
if(newState == Phonon::ErrorState)
{
QMessageBox::critical(this,tr("Video file error!"),
tr("Video file error: ") + media->errorString(),QMessageBox::Ok);
}
}
Я должен признать, однако, что этот код кажется мне довольно медленным.Библиотека фононов используется в моей программе только в одном месте, и это здесь, в диалоговом окне, где пользователь может выбрать видеоклип для встраивания, и я хочу, чтобы размеры видео считывались из файла.Требуется некоторое время, пока откроется это диалоговое окно, поэтому я думаю, что это решение слишком жесткое для моей проблемы.Однако я не смог найти другое решение.Если есть разные мнения относительно предмета этого поста, я был бы рад услышать их.