由于我似乎需要提高代码的性能,我想问一下,QGraphicsPixmapItem::setPixmap(*Qimage)
的性能有多好?
我的图像是1024x1024像素,大约每2.5秒更新一次。但我需要更快地更新(最多每2.5秒4096x)。 QGraphicsPixmapItem::setPixmap(*Qimage)
可以吗?
我使用数组array[y*SCENEWIDTH+x] = color
直接填充QImage的每个像素。
但是速度QGraphicsPixmapItem::setPixmap(*Qimage)
似乎冻结了我的GUI。目标是显示极坐标(每个方位角的方位角)(雷达视频)传入的大量数据。
有什么建议吗?谢谢!
答案 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,您应该看到正在绘制的图像的平滑过渡,将颜色从黑色变为白色。