QGraphicsPixmapItem :: setPixmap()性能?

时间:2015-11-18 13:34:55

标签: performance qt qimage qpixmap

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

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

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:1)

我建议您创建自己的类QGraphicsPixmapItem并更新成员QGraphicsItem,而不是每次都使用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);
    }
};

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