我有以下用戶界面,其中顯示聲譜圖(頻率+時間聲音表示)。所以圖像不是從某處加載的,它是在QPainter
的同時讀取WAV
文件。如何在窗口中有效地滾動1024x90000圖像?
我目前的實現是一個巨大的QImage
對象中,當圖像繪製。而就paintEvent()
,我畫了大QImage
的一部分在widget:
QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
但是,據我所知,在QPixmap
被顯示在屏幕上的像素映射優化,所以我應該轉換QImage
爲QPixmap
後超聲波圖的繪製完成了嗎?
而且,它是值得保持大的圖像爲某種更小尺寸的獨立QPixmap
對象的鏈表,並paintEvent()
更聰明,以更小的物體,避免Qt的自動切割程序的列表上運行等等?
當我的QImage足夠大時,每個paintEvent()
消耗大量CPU
。
各種建議,歡迎:)
也許發佈一些關於你想運行的機器的東西。根據目標機器的不同,使用鏈表可能很智能。 – EKS 2012-02-26 16:42:33
也許我錯了,但看起來你畫的每一個油漆事件的整個形象。您只能繪製當前在視口上顯示的圖像部分。這應該保持CPU消耗不變。 – Masci 2012-02-28 12:20:13
@Masci:請參閱QPaintEvent文檔中的「自動裁剪」註釋:Qt自動執行此操作,並且不需要將任何QPaintEvent裁剪狀態明確複製到QPainter。 – timday 2012-02-28 23:19:21