2014-09-03 19 views
0

我試圖在QTCreator.İ想GUI應用程序從選定的目錄(類似的幻燈片)顯示所有圖像,我讀的QDir,QStringList中,QFileDialog類參考,但它does not't工作。它只顯示文件夾中的最後一個圖像。如何陸續在Qt來顯示從一個目錄的所有圖像,OpenCV的

for(int i=0;i<10;i++) 
{ 

    QImage image2(directory+"/"+fileList[i]); 
    ui->label_pic2->setPixmap(QPixmap::fromImage(image2)); 
    //Sleep(550); 
} 

睡眠功能只能使緩慢加載不顯示彼此。

+3

Qt是基於事件的。最直接的方法是使用QTimer。切勿通過睡眠來阻塞主線程。 – hyde 2014-09-03 06:36:08

+0

@hyde QTimer的作品看起來像sleep.There沒有區別。只有最後一個圖像加載延遲5s等。我想在屏幕上看到幻燈片放映。 – Anivia 2014-09-03 06:49:48

+3

*「沒有區別。」* - 這是一個相當權威的陳述,考慮到您遇到了技術問題,並且有人正在將您指向解決方案的方向......而您並未嘗試查看是否它有幫助。一個更好的反應可能是一個問題,比如*「使用QTimer和睡眠之間有什麼區別?」* – HostileFork 2014-09-03 06:53:12

回答

2

首先,你需要undertand,當不執行你的代碼GUI只更新和應用程序可以處理傳入events。如果你創建了一個無限循環,你的GUI將被更新。這就是爲什麼你只能看到最後一張圖像 - 因爲你不讓GUI更新。

您可以強制應用程序通過QCoreApplication::processEvents()來處理傳入的事件。在這種情況下,您可能會看到圖像的快速閃爍。但顯示每張圖像後,您肯定需要暫停。您的Sleep可能會在那裏工作,但在暫停期間,您的應用程序將被凍結而無法處理事件。

這就是爲什麼你一直建議使用QTimer。它在一定的時間內調用一個插槽。所有其他時間,應用程序正在處理消息和更新GUI等。當插槽被呼叫時,您可以切換label以顯示下一張圖像。這正是你需要的。

總結:
1.創建一個QTimer,設置時間間隔並將其連接到一個插槽,啓動計時器。
2.在插槽實現中讀取列表中的下一個圖像,並將其分配給label

提示:要跟蹤顯示的圖像,請創建一個整數成員變量。在開始動畫時將其設置爲0,並在插槽中增加它。

相關問題