由于我似乎需要提高代码的性能,所以我想问,QGraphicsPixmapItem::setPixmap(*Qimage)的性能有多好?我的图像是1024x1024PX,每2.5秒更新一次。但我需要它更新得更快(最多每2.5秒4096倍)。有可能用QGraphicsPixmapItem::setPixmap(*Qimage)吗?我将直接用一个数组: QImage填充每个像素:array[y*SCENEWIDTH+x] = color。
但是,以这样的速度,QGraphicsPixmapItem::setPixmap(*Qimage)似乎冻结了我的GUI。目标是显示在极坐标(方位每方位角)(雷达视频)输入的大量数据。
有什么建议吗?谢谢!
发布于 2015-11-18 15:00:42
与每次使用QGraphicsPixmapItem和设置映像不同,我建议创建从QGraphicsItem派生的自己的类并更新成员QImage。下面是一个示例,展示了更新1024x1024图像的平稳过渡(注意它使用了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中,您将看到正在绘制的图像的平稳转换,将颜色从黑色一直到白色。
https://stackoverflow.com/questions/33781485
复制相似问题