Qt顯示導入視訊的總時長需要通過Opencv來實作。。。
QTime timer;
int fps = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS);
int totalFrames = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_COUNT);
QString totalTime;
QTime tTime = timer.addSecs(totalFrames/fps);
QString timeLength;
timeLength= tTime.toString("hh:mm:ss");
m_pTimeLabelText->setText(timeLength);
首先,通過opencv的cvGetCaptureProperty得到視訊檔案的幀率及總幀數,然後把時間加到目前時間之上就可以得到視訊檔案的總時間。
下面說說QTime這個類的用法:
QTime::QTime()
預設構造函數,構造一個時,分,秒都為0的時間,如00:00:00.000(午夜)
QTime::QTime(int h, int m, int s=0, int ms = 0)
構造一個使用者指定時,分,秒的時間.
QTime QTime::addMSecs(int ms) const//傳回值為const說明這個傳回的參數是不能修改的,而傳入的參數如果為const,則說明該參數在這個函數内隻能用而不能修改,即隻讀
傳回一個目前時間對象之後或之前ms毫秒的時間對象(之前還是之後視ms的符号,如為正則之後,反之之前)
如:QTime time(3,0,0);
QTime newTime1 = time.addMSecs(1000);
QTime newTime2 = time.addMSecs(-1000);
則newTime1是一個比time所指定時間(03:00:00.000)延後1000毫秒也即1秒的時間(03:00:01.000),而newTime2則提前1000毫秒(02:59:59.000)
QTime QTime::addSecs(int nsecs) const
與addMSecs()相同,隻是nsecs機關是秒.即傳回一個目前時間對象之前或之後的時間對象.
int QTime::elapsed() const
傳回最後一次調用start()或restart()到現在已經經過的毫秒數.如果經過了24小時之後,則計數器置0.如果系統時間設定改變,則結果不确定.
int QTime::hour() const
傳回時間對象的小時,取值範圍(0--23)
int QTime::minute() const
傳回時間對象的分鐘,取值範圍(0--59)
int QTime::second() const
傳回時間對象的秒,取值範圍(0--59)
int QTime::msec() const
傳回時間對象的毫秒,取值範圍(0--999)
bool QTime::isNull() const
如果時間對象等于00:00:00.000,則傳回true;反之傳回false.
bool QTime::isValid() const
如果時間對象是有效的,則傳回true;反之傳回false.(即:時,分,秒,毫秒都在其取值範圍之内)
int QTime::msecsTo(const QTime &t) const
傳回目前時間對象到t所指定的時間之間的毫秒數.如果t早于目前時間對象的時間,則傳回的值是負值.因為一天的時間是86400000毫秒,是以傳回值範圍是-86400000--86400000
int QTime::secsTo(const QTime &t) const
與msecsTo()基本相同,隻是傳回的是秒數,傳回值的有效範圍是-86400--86400
int QTime::restart()
設定目前時間對象的值為目前系統時間,并且傳回從最後一次調用start()或restart()到現在的毫秒數.如果計數器超出24小時,則置0.如果計數器計數時系統時間設定改變,則結果不确定.
bool QTime::setHMS(int h, int m, int s, int ms = 0)
設定目前時間對象的時,分,秒和毫秒.如果給定的參數值有效,則傳回true,否則傳回false.
void QTime::start()
設定目前時間對象的值為目前系統時間,這個函數實際是結合restart()和elapsed()用來計數的.
QString QTime::toString(const QString &format) const
按照參數format指定的格式用字元串形式輸出目前時間對象的時間.
參數format用來指定時,分,秒,毫秒的輸出格式.如(hh:mm:ss.zzz)
h:表示小時,範圍是0--23
hh:用兩位數表示小時,不足兩位的前面用0補足,如(0點:00,3點:03,11點:11)
m:表示分鐘,範圍0--59
mm:用兩位數表示分鐘,不足兩位的前面用0補足.
s:表示秒,範圍0--59
ss:用兩位數表示秒,不足兩位的前面用0補足.
z:表示毫秒,範圍0--999
zzz:用三位數表示毫秒,不足三位的前面用0補足.
AP:用AM/PM顯示.
ap:用ap/pm顯示.
例如:
QTime time(14,3,9,42);//設定時間為14:03:09.042
QString i = time.toString("hh:mm:ss.zzz");//結果為14:03:09.042
QString j = time.toString("h:m:s.z");//結果為14:3:9.42
QString m = time.toString("h:m:s.z AP");//結果為2:3:9.42 PM
QString n = time.toString("h:m:s.z ap");//結果為2:3:9.42 pm
QString QTime::toString(Qt::DateFormat f = Qt::TextDate) const
按照參數format指定的格式用字元串形式輸出目前時間對象的時間.
參數的可選值:
Qt::TextDate:格式為HH:MM:SS
Qt::ISODate:遵循ISO8601的時間表示格式,同樣也為HH:MM:SS
Qt::LocalDate:字元串格式依賴系統本地設定
----------------------------------------------------------------------------------------------------------------------------------------
靜态成員函數:
QTime QTime::currentTime()
傳回目前的系統時間.
QTime QTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
使用參數format指定的格式根據參數string指定的時間傳回一個時間對象。如果string指定的時間不合法,則傳回一個無效的時間對象。
format可選值:
Qt::TextDate:格式為HH:MM:SS
Qt::ISODate:遵循ISO8601的時間表示格式,同樣也為HH:MM:SS
Qt::LocalDate:字元串格式依賴系統本地設定
QTime QTime::fromString(const QString &string, const QString &format)
使用參數format指定的格式根據參數string指定的時間傳回一個時間對象.如果string指定的時間不合法,則傳回一個無效的時間對象.
format的格式參看QString QTime::toString(const QString &format) const.
bool QTime::isValid(int h, int m, int s, int ms = 0)
如果參數所指定的時間是合法的,則傳回true;反之傳回false.
----------------------------------------------------------------------------------------------------------------------------------------
靜态成員函數不依賴于對象,可以通過類直接調用,與對象無關:
如:擷取目前系統時間的小時部分時不需要定義QTime對象
int hour = QTime::currentTime().hour()