繁体   English   中英

剪辑小部件的paintEvent

[英]Clipping in a widget's paintEvent

我在Qt中裁剪有问题。 我有一个小部件,其中绘制了很多矩形。 由于我不时更改几个矩形,因此我只希望绘制小部件的一小部分(仅这些矩形),并将绘制区域裁剪到这些部分。

如果矩形自上次绘画以来已接收新颜色,则isNew()函数为true。

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上绘制所有这些矩形。 由于您可以随时绘制到像素图,因此可以在需要更新时将图块直接绘制到像素图。 在绘画事件中,您只需绘制“已经渲染”的像素图。

这样,您就不必记住更改了哪些图块,并且可以避免遍历整个矩阵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM