天天看點

Qt顯示視訊總時長

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()