我創建QPropertyAnimation
並將其連接到我的SonogramWidget
,這些動畫事件垂直滾動長圖片。 「長圖片」由100個預先計算的QPixmap對象1024x128垂直放置。他們顯示在SonogramWidget::paintEvent()
與QPainter
。繪製過程不一定全部爲QPixmap
,但只能看到它們,考慮小部件高度和當前垂直偏移量。 CPU幾乎是免費的,因爲QPixmap
是顯示圖片的最快方式。在滾動期間沒有大的計算,因爲所有的100 QPixmaps
都是預先計算的並存儲在存儲器中。使用Qt動畫框架對QPixmap的滾動動畫
我看到了奇怪的效果:脈動運動:每秒2次,整個圖像稍微加速並向上移動1..2個像素,比平常運動快。當我使用單個60 fps QTimer替換Qt Animation Framework並在SLOT中滾動圖像時,效果相同。
視頻:http://www.youtube.com/watch?v=KRk_LNd7EBg#t=8(從00:08開始;我的firefox爲視頻播放本身添加了更多斬碎,谷歌Chrome播放視頻效果更好)。
我看到我的Linux和Windows版本的效果相同。
解決方案 我想出了問題:「砍」不是一個bug,它是一個功能!這是整數計算的一個特點,所以有時我們必須爲動畫設定不同的數字,例如:16,16,16,16,16,16,17
,16,16,16,16,16,17
,。 ...
你的CPU負載說什麼?滾動越慢,可見的「白色」就越多。由於QPainter對於繪製像素是白色還是黑色應該不會產生影響,因此它必須是您的校準。如果你的機器接近極限,我會期望這樣的奇怪輸出文物。或者,這是「越來越慢」的錯覺?不確定。 – Greenflow
所有QPixmaps預先計算並存儲在內存中。在滾動期間沒有計算。只有黑色像素的整個圖像對比度較低,我們沒有注意到所描述的效果。 – pavelkolodin
我不知道,所以這是純粹的猜測。但有時甚至這有助於。 :-)那麼,你有可能把全部放在一個pixmap中嗎?只是暫時的?只是爲了排除100個垂直QPixmaps奇怪地交互? – Greenflow