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,您应该会看到正在绘制的图像平滑过渡,颜色从黑色变为白色。
看来我需要提高代码的性能,所以我想问一下,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,您应该会看到正在绘制的图像平滑过渡,颜色从黑色变为白色。