在c++ gui qt编程这本书的第五章,有下面这段代码
其中updateRubberBandRegion函数只是一个调用了update的函数,为什么可以把前一次画的橡皮圈消除掉呢??
void Plotter::mouseMoveEvent(QMouseEvent *event)
{
if (rubberBandIsShown) {
updateRubberBandRegion();
rubberBandRect.setBottomRight(event->pos());
updateRubberBandRegion();
//注意为什么治理有两个update...,这样可以消除遗留的band,前一个消除,后一个画
}
}
void Plotter::paintEvent(QPaintEvent * /* event */)
{
QStylePainter painter(this);
painter.drawPixmap(0, 0, pixmap);
if (rubberBandIsShown) {
painter.setPen(palette().light().color());
painter.drawRect(rubberBandRect.normalized()
.adjusted(0, 0, -1, -1));
}
if (hasFocus()) {
QStyleOptionFocusRect option;
option.initFrom(this);
option.backgroundColor = palette().dark().color();
painter.drawPrimitive(QStyle::PE_FrameFocusRect, option);
//drawPrimitive设置绘制基本元素的风格,基本元素指gui中不可再分的东西
}
}