QGraphicsPixmapItem::setPixmap() 性能?

QGraphicsPixmapItem::setPixmap() Performance?

看来我需要提高代码的性能,所以我想问一下,QGraphicsPixmapItem::setPixmap(*Qimage)的性能有多好? 我的图像是 1024x1024 像素,大约每 2.5 秒更新一次。但我需要它更新得更快(最多每 2.5 秒 4096x)。 QGraphicsPixmapItem::setPixmap(*Qimage) 可以吗? 我直接用数组填充 QImage 的每个像素:array[y*SCENEWIDTH+x] = color.

但是以这种速度 QGraphicsPixmapItem::setPixmap(*Qimage) 似乎冻结了我的 GUI。目标是显示极坐标中传入的大量数据(每个方位角的方位角)(雷达视频)。

有什么建议吗?谢谢!

与其每次都使用 QGraphicsPixmapItem 并设置图像,我建议创建您自己的 QGraphicsItem 派生的 class 并更新成员 QImage。这是一个显示更新 1024 x 1024 图像的平滑过渡的示例(请注意它使用 C++ 11)

class MyImage : public QGraphicsItem
{
public:

    MyImage()
        :QGraphicsItem(NULL)
    {
        img = QImage(1024, 1024, QImage::Format_RGB32);
        static int red = 0;
        static int green = 0;
        static int blue = 0;
        img.fill(QColor(red++%255, green++%255, blue++%255));

        QTimer* pTimer = new QTimer;
        QObject::connect(pTimer, &QTimer::timeout, [=](){

            // C++ 11 connection to a lambda function, with Qt 5 connection syntax
            img.fill(QColor(red++%255, green++%255, blue++%255)); 
            update();
        });

        pTimer->start(1000 / 30); // 30 frames per second
    }

private:
    virtual QRectF boundingRect() const
    {
        return QRectF(0, 0, 1024, 1024);
    }

    QImage img;

    void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
    {
        painter->drawImage(0, 0, img);
    }
};

如果您实例化此 class 的实例并将其添加到 QGraphicsScene,您应该会看到正在绘制的图像平滑过渡,颜色从黑色变为白色。