【发布时间】:2015-04-09 17:35:51
【问题描述】:
我在 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(...) 函数时,我的程序运行得更慢了。
【问题讨论】:
-
但是你为什么使用
clipRegion?你有什么收获?海事组织什么都没有!在此代码中,您不会剪裁任何内容,您只需对剪裁只会削弱性能的内容进行无用检查。 -
@Mark R. 我理解
clipRegion错了。我认为这会阻止程序绘制所有新内容。相反,它只检查剪辑区域并且不允许在那里进行更改。你说的对。这减慢了程序的速度。 -
您设置的剪切区域等于绘制的矩形。在这段代码中,只剪掉了心脏的表现,没有剪掉任何东西。
标签: c++ qt clipping paintevent