首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QGraphicsPixmapItem::setPixmap()性能?

QGraphicsPixmapItem::setPixmap()性能?
EN

Stack Overflow用户
提问于 2015-11-18 13:34:54
回答 1查看 1.4K关注 0票数 1

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

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

有什么建议吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 15:00:42

与每次使用QGraphicsPixmapItem和设置映像不同,我建议创建从QGraphicsItem派生的自己的类并更新成员QImage。下面是一个示例,展示了更新1024x1024图像的平稳过渡(注意它使用了C++ 11)

代码语言:javascript
复制
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中,您将看到正在绘制的图像的平稳转换,将颜色从黑色一直到白色。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33781485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档