2011-04-19 80 views

回答

1

帕夫洛,你可以试试这个:

QMediaContent media("myMovie.mov"); 
QSize resolution = media.canonicalResource().resolution(); 

代码使用QMediaResource类从Qt Mobility项目。我还没有尝试过,我想你至少需要一个正确的后端(能够读取MOV格式的插件)。我只是从API概述中给出这个答案。

希望这会有所帮助。

+0

谢谢你的回答!我会执行它并让你知道它是否有效。 – 2011-04-20 06:10:46

+0

我没有使用Qt Modility,因为那需要额外下载我和我编写代码的所有其他人。我坚持默认的Qt安装,并找到了一个不同的解决方案,如果我有兴趣,可以在下面找到它。无论如何,谢谢你的帮助! – 2011-05-02 11:31:10

0

我终于解决了我的问题,我想我会与其他人分享我的解决方案。 在类的构造函数我初始化以下两个变量:

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); 
    } 
} 

但是我必须承认,这段代码在我看来很慢。声音库仅用于我的程序中的一个地方,这是在这里,在一个对话窗口中,用户可以选择要嵌入的视频剪辑,并且我希望从文件中读取视频尺寸。这个对话窗口打开需要一些时间,所以我想,这个解决方案对于我的问题来说有点过于苛刻。但是,我无法找到另一种解决方案。如果对这篇文章的主题有不同意见,我会很高兴听到他们的声音。