我正在创建一个小型绘画应用程序,我想制作象棋般的背景以表示透明度。由于我是Qt和C ++的新手,我想知道在堆栈中创建一个小像素图是否正常(性能/内存)如下:
void GraphicsScene::drawBackground (QPainter *painter, const QRectF&)
{
QPixmap pix(16, 16);
QPainter p(&pix);
p.fillRect(0, 0, 8, 8, Qt::white);
p.fillRect(8, 0, 8, 8, Qt::gray);
p.fillRect(0, 8, 8, 8, Qt::gray);
p.fillRect(8, 8, 8, 8, Qt::white);
QBrush b(pix);
painter->fillRect(sceneRect(), b);
}
或者更好的是我创建一次刷子并将其存储在成员字段中?
答案 0 :(得分:0)
如果它是常量且不可变的,我会将其创建为static const
某处或static
,使用std::call_once
或类似的守卫进行懒惰初始化。
这可能是过早的优化,但我至少会将它重构为自由函数。如果您确实在将来看到性能问题,则可以使用memoization进行优化,而无需重构所有代码。
答案 1 :(得分:0)
由于您的代码似乎可读且正确,我建议您不要更改它。推迟优化,直到证明性能对于此特定功能很重要(例如,使用分析器)。
目前,你没有做任何特别无效的事情;堆栈上欢迎这种尺寸的物体。