如何在窗口中有效滚动1024x90000图像?

pav*_*din 9 c++ audio qt scroll qimage

我有以下UI,其中显示了超声波图(频率+时间声音表示).因此图像不是从某处加载的,而是QPainter在读取WAV文件时绘制的.

用户界面

我当前的实现是一个巨大的QImage对象,其中绘制图像.然后paintEvent(),我QImage在小部件上绘制部分大部分内容:

QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
Run Code Online (Sandbox Code Playgroud)

但是,正如我所知,它QPixmap是针对在屏幕上显示像素图而优化的,所以我应该在完成超声波图的绘制后将其转换QImage为a QPixmap

此外,是否值得将大图像保持QPixmap为较小尺寸的单独对象的链接列表,并使paintEvent()更智能的操作在较小的对象列表上以避免Qt的自动切割程序等等?

当我的QImage足够大时,每个都paintEvent()消耗了很多CPU.

欢迎各种建议:)

tim*_*day 1

是的,根据我有限的 Qt 应用程序开发经验,如果您有静态图像(或不经常更新的图像),那么非常值得(出于性能目的)从中创建一个并保留它以在处理程序中QPixmap使用 via 。QPainter::drawPixmappaintEvent

然而,我从未尝试过对任何大于 4Kx4K 图像的图像执行此操作,因此我无法确定它是否适用于您的巨大图像,或者当您开始对图形内存施加压力时会严重崩溃。在考虑添加复杂的平铺系统之前我当然会尝试一下。