我正在创建一个小的绘画应用程序,我想做一个象棋一样的背景来表示透明度。因为我是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);
}或者更好的做法是创建一次画笔并将其存储在成员字段中?
发布于 2015-02-22 21:57:56
如果它是一个常量并且是不可变的,我会在某个地方将它创建为一个static const,或者是一个使用std::call_once或类似的static懒惰地初始化的guard。
这可能是过早的优化,但我至少会将其重构为一个自由函数。如果将来确实看到性能问题,您可以使用memoization进行优化,而不必重构所有代码。
发布于 2015-02-22 22:38:17
由于您的代码似乎是可读和正确的,我建议您不要更改它。推迟优化,直到证明性能对于这个特定函数很重要(例如,使用分析器)。
目前,您并没有做任何特别无效的事情;堆栈上欢迎这种大小的对象。
https://stackoverflow.com/questions/28658546
复制相似问题