qt窗口部件widget刷新的时候出现闪烁重影
我自定义了三个派生于QWidget类A、B、C,其中C的parent是B,B的parent是A,为了在A中绘图,所以我重载了它的paintEvent函数,代码如下:
void A::paintEvent(QPaintEvent *event){
//
QStyleOption opt;
opt.init(this);
QPainter painters(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painters, this);
//
QRect rect =event->rect();
long leftX =rect.left()+LeftSpace;
long rightX =rect.right()-RightSpace;
long topY =rect.top()+TopSpace;
long bottomY =rect.bottom()-BottomSpace;
painters.begin(this);
painters.save();
QPen myPen(QColor(63, 63, 63, 222));
myPen.setWidth(1);
painters.setPen(myPen);
drawRowLines(&painters,xRowTitles,XRowTitlesNum,leftX,rightX,topY,bottomY);//画线
drawColumnLogLines(&painters,yColumnTitles,yColumnValue,YColumnTitlesNum,leftX,rightX,topY,bottomY);//画线
painters.restore();
painters.end();
}
同时我在A中添加了一个水平布局,而在B中,我需要在每次改变它的大小的时候,再改变C的位置,实现代码如下:
void B::paintEvent(QPaintEvent *event){
//
QStyleOption opt;
opt.init(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
//
updateCWidgetsGeometry();//这里更新C类对象的位置
}
以上代码运行没问题,但出现了以下这个现象:
当我将A的大小放大的时候,由于水平布局的原因,B对象也会随着放大,这样就会触发B的paintEvent函数,自然就会改变C对象的坐标,但此时在C的背影下出现了一些重影,其他地方却没有,相当怪异。
不知问题的关键在哪里,希望各位指点。另外还有一个问题,我在调试的时候发现,每次调整A的大小的时候,A的paintEvent函数和B的paintEvent函数都执行了三次,而且执行顺序是ABABAB进行,不明觉坑。