2010-06-10 70 views
1

我有一個包含各種其他小部件的QWidget。我想通過逐漸從上向下揭示它出現在屏幕上的動畫效果,將它的高度從0增加到任何它的自然高度。Qt:動畫QWidget的'下滾'

我有它的方式是目前:

mAnimation = new QPropertyAnimation(this, "maximumHeight"); 
mAnimation->setStartValue(0); 
mAnimation->setEndValue(400); 
mAnimation->start(); 

這有兩個問題: - 當高度達到一定高度時,它崩潰了「qDrawShadeRect:參數無效」錯誤。 - 如果我將0更改爲100,它可以正常工作,但包含在我製作的QWidget中的小部件會隨着小部件動畫的變化而改變它們的佈局,開始非常壓扁並隨着它們獲得更多空間逐漸分散。這看起來很醜陋!

有沒有人有任何建議?

回答

0

對於崩潰,我建議抓取堆棧跟蹤,並假設問題不在您的代碼中,report it as a bug

對於第二種,不是將小部件完全呈現在您想要的大小不同的位置,而是將其呈現爲您想要的樣子。例如:

  • 使用QStackWidget兩個項目:實際的小部件和所需的小部件
  • 所需的部件實際上只是一個QWidget::render()到你想要的部件是什麼樣子像素圖。
  • 對於動畫,請顯示預先呈現的小部件,然後在您達到目標大小後切換。
+0

我不知道這是否仍然是最好的策略,或者是否有更好的解決方案。 – Trilarion 2014-10-28 09:51:45

1

對於第二個問題,我建議將小部件內的所有內容都包裝在另一個小部件中,該部件具有固定的大小。由於小部件的剪切,這意味着小部件將在動畫時顯示全尺寸小部件的一部分。

+0

我以前嘗試過,但無法設置內部小部件的大小。我想避免手動計算內部小部件的大小。我試圖將它添加到佈局以獲取正確的大小,然後手動設置它,但似乎佈局不會立即佈置小部件,因此它返回的大小不正確。 如果我能解決這個問題,它會工作! – eAi 2010-06-11 10:40:01