2011-08-23 42 views
1

我遇到了一個問題,我在做小部件的屬性動畫,但他們的動畫位置似乎在下一個佈局階段被覆蓋。這些小部件似乎在動畫開始的時候就處於跳躍位置,看起來很糟糕。因此,我想如果我寫了自己的佈局代碼,我可以對事物有更多的控制權。在QT中編寫自定義佈局最簡單的方法是什麼?

在QT中編寫自定義佈局最簡單的方法是什麼?我嘗試按照文檔的「手動佈局」一節中的步驟操作:http://doc.qt.nokia.com/latest/layout.html#manual-layout但是,當我嘗試在子窗口小部件上調用setGeometry時,我似乎遇到了崩潰。此外,文檔似乎與「手動佈局」衝突,稱從resizeEvent內調用setGeometry,resizeEvent文檔聲稱不這樣做。

我想我可以寫一個真正的佈局類。看起來不像代碼太多。但我想知道什麼是最簡單/最簡單的方式來獲得自定義佈局。

+0

我不認爲你應該用佈局做動畫,因​​爲他們通常在幕後做很多自動化的事情,所以你無法正確控制任何東西。如果直接對對象的位置和尺寸進行動畫處理,很可能會遇到更少的麻煩。 –

+0

這就是我想要的。我有一個通常位於屏幕頂部的小部件。我試圖將它從屏幕的頂部移動到其位置,以便它可以滑入視圖中。問題在於,當動畫開始時,小部件在結束位置(佈局通常放置它)短暫閃爍,然後滑動下來的動畫運行。當談到QT和動畫時,我是一個新手,所以也許我錯過了一些東西。我雖然如果我寫了我自己的佈局與「幻燈片」屬性是垂直偏移量,然後動畫該支柱可能工作。 – Skeets

回答

0

我認爲這可能有效。

  1. 從小部件開始完全定位在父小部件之外。做不是將該小部件添加到佈局。 A的幾何圖形很可能與父母共享邊緣。

  2. 創建一個虛擬小部件D,它轉發A的sizeHint(),但除此之外別無其他。把它放到佈局中。

  3. 動畫插件朝向插件的幾何形狀D.

  4. 交換佈局中的窗口小部件(刪除插件d,添加小窗口A)。

如果部件A和d是你自己造成的,那麼你就應該使用PIMPL方法。如果你的小部件沒有子部件,交換部件將是微不足道的 - 交換pimpl指針。小部件本身不必交換。不要從QWidgetPrivate派生你的PIMPL類,也不要支持它,但我已經看到了它的代碼。不是一個好主意。

相關問題