gpt4 book ai didi

c++ - 在小部件的 paintEvent 中裁剪

转载 作者:行者123 更新时间:2023-11-28 06:26:35 25 4
gpt4 key购买 nike

我在 Qt 中遇到裁剪问题。我有一个小部件,我在其中绘制了一大堆矩形。由于我只是不时更改几个矩形,所以我只想绘制小部件的一小部分(仅这些矩形)并将绘制区域裁剪到这些部分。

如果矩形接收到自上次绘制以来的新颜色,则 isNew() 函数为真。

void Environment::paintEvent(QPaintEvent *event)
{
QPainter painter (this);
Tile t;

//paint the matrix
for(int i=0; i<size; ++
t = matrix[i+j*yizeY];
if(t.isNew()){
painter.setClipRegion(QRegion(t.getRect()));
painter.setBrush(t.getColor());
painter.drawRect(t.getRect());
t.used();
}
}
}

我做错了什么?当我使用 setClipRegion(...) 函数时,我的程序运行得更慢。

最佳答案

如果你想提高性能,你可以在 QPixmap 上绘制所有这些矩形。由于您可以随时绘制到像素图,因此您可以在需要更新时直接将图 block 绘制到像素图。在绘画事件中,您只需绘制“已渲染”的像素图。

这样您就不必记住哪些图 block 发生了变化,并且可以避免遍历整个矩阵。

关于c++ - 在小部件的 paintEvent 中裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28418930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com