2011-12-13 183 views
1

我已經爲我的問題搜索了一些解決方案,但沒有任何內容......我在一個QLabel中使用帶有GIF動畫的QMovie進行加載狀態,好嗎?這很簡單,我在這個鏈接中學到了:GIF animation in Qt,當我打開一個菜單,比如擁有一個標籤,並且將QMovie放在該菜單的QLabel中時,這個功能完美。在QLabel中使用QMovie與GIF動畫的問題

我現在的問題是,我做了一個特定的UI加載狀態,當我知道比一些用戶界面會慢打開,我會顯示我的加載狀態用戶界面,當用戶界面結束打開我會關閉我的加載狀態UI。在這個加載狀態UI中,我輸入了一個QMovie(GIF動畫)和一個簡單的QLabel,寫成「Loading ...」,非常簡單,對吧? Buuuut,當我使用這個特定的用戶界面時,QMovie不起作用。實際上,它並不停留在循環中......請參閱當我在UI中使用QMovie時,QMovie保持循環。

我的英語不太好,但你明白我的問題嗎? =/

我使用的鏈路的同一代碼:

this->m_pMovie = new QMovie(":/ui/images/my_image_loading.gif"); 
this->m_pMovie->setScaledSize(QSize(50, 50)); 
this->ui->labelImageLoading->setMovie(this->m_pMovie); 
this->m_pMovie->start(); 

有人知道的?

謝謝你...

回答

2

在你如何使用QMovie中,一切看起來都很好。這只是一個猜測,但我想知道,如果你的QMovie沒有被更新,因爲GUI線程太忙了。如果您的UI加載速度很慢,那麼速度慢可能是因爲它正在GUI線程上進行大量處理。這是相同正在嘗試更新您的QMovie的線程。結果是:您的QMovie從不更新,因爲它依賴於相同的GUI線程來繪製其更新。

如果UI加載過程中有任何地方可以對QApplication::processEvents()進行幾次調用,那麼電影就會更新。但它可能會波濤洶涌。

否則,除了嘗試找到一種方法來使這些UI加載速度更快之外,您可以做的確實不多。 (將它們分成不同的窗口,簡單的佈局,闖入按需加載的標籤等)

+0

我理解@Dave ...我真的已經使用QApplication :: processEvents(),但忘了寫在這裏。那麼,使用processEvents()方法,我的QLabel與QMovie顯示,但動畫保持靜態。 但現在我明白了爲什麼...因爲新的用戶界面比我打開和我的加載狀態用戶界面在同一線程,GUI線程,對不對? 感謝您的解釋! 我會搜索一些另外的解決方案,但我相信將不可能使用我的GIF加載狀態,因爲其他問題是如果我打開另一個線程,我不會在UI中繪畫... –

+0

一個解決方案是生成一個全新的'QProcess',它啓動一個「waiting ...」應用程序。然後在UI加載後終止進程。然後你有兩個GUI線程(在兩個不同的進程上)。這當然會引起它自己的問題,並且有點重要。但是如果沒有辦法縮短主UI的加載時間,它可能會工作。 –