2011-04-19 66 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); 
    } 
} 

但是我必須承認,這段代碼在我看來很慢。聲音庫僅用於我的程序中的一個地方,這是在這裏,在一個對話窗口中,用戶可以選擇要嵌入的視頻剪輯,並且我希望從文件中讀取視頻尺寸。這個對話窗口打開需要一些時間,所以我想,這個解決方案對於我的問題來說有點過於苛刻。但是,我無法找到另一種解決方案。如果對這篇文章的主題有不同意見,我會很高興聽到他們的聲音。