1. void QWidget::paintEvent ( QPaintEvent * ) [虚 保护]
这个事件处理器可以在子类中被重新实现来接收绘制事件。
绘制事件就是重新绘制这个窗口部件的所有部分的一个请求。它可以是repaint()或update()的结果,或者因为这个窗口部件原来被变暗并且现在已经不再被覆盖了,或者其它很多原因。
很多窗口部件在当它们被请求时,它们很简单地重新绘制整个界面,但是一些比较慢的窗口部件需要通过仅仅绘制被请求的区域QPaintEvent::region()进行优化。这个速度优化不会改变结果,在事件处理过程中,绘制仅仅发生在被改变的区域中。例如,QListView和QCanvas就是这样做的。
Qt也试图通过把多个绘制事件合并为一个来加快绘制速度。当update()被调用几次或者窗口系统发送几次绘制事件,Qt把它们合并为一个比较大区域(请参考QRegion::unite())的一个事件中。repaint()不允许这样优化,所以只要可能我们建议使用update()。
当绘制事件发生,更新区域通常被擦除,所以你正在这个窗口部件的背景上绘制。这里有一些例外并且
protected: | |||||||||||
void paintEvent(QPaintEvent *); | |||||||||||
QPainter *paint; | |||||||||||
public: | |||||||||||
void drawItA(QPainter *paint); | |||||||||||
void drawItB(QPainter *paint); | |||||||||||
void drawItC(QPainter *paint); | |||||||||||
void Calibrate::paintEvent(QPaintEvent *)//paintEvent函数由系统自动调用,用不着我们人为的去调用 | |||||||||||
{ | |||||||||||
QPainter painter(this);//开始画线 | |||||||||||
// painter.begin(this);//开始画线 | |||||||||||
QPen pen; | |||||||||||
pen.setColor(QColor(255,0,0)); //设置画笔为红色 | |||||||||||
painter.setPen(pen); //选择画笔 | |||||||||||
painter.drawLine(0,0,100,100); //用该红色画笔画一条线,起点(0,0),终点(100,100) | |||||||||||
drawItA(&painter); | |||||||||||
//painter.end(); | |||||||||||
} | |||||||||||
void Calibrate::drawItA(QPainter *paint) | |||||||||||
{ | |||||||||||
//paint->begin(this) | |||||||||||
QPen pen; | |||||||||||
pen.setColor(QColor(255,0,0)); //设置画笔为红色 | |||||||||||
paint->setPen(pen); //选择画笔 | |||||||||||
paint->drawLine(0,0,100,100); //用该红色画笔画一条线,起点(0,0),终点(100,100) | |||||||||||
paint->drawEllipse(10,10,50,50); //用该红色画笔画一条线,起点(0,0),终点(100,100) | |||||||||||
drawItB(paint); | |||||||||||
//paint->end(); | |||||||||||
} | |||||||||||
void Calibrate::drawItB(QPainter *paint) | |||||||||||
{ | |||||||||||
//paint->begin(this); | |||||||||||
QPen pen; | |||||||||||
pen.setColor(QColor(255,0,0)); //设置画笔为红色 | |||||||||||
paint->setPen(pen); //选择画笔 | |||||||||||
paint->drawEllipse(100,100,100,100); //用该红色画笔画一条线,起点(0,0),终点(100,100) | |||||||||||
drawItC(paint); | |||||||||||
//paint->end(); | |||||||||||
} | |||||||||||
void Calibrate::drawItC(QPainter *paint) | |||||||||||
{ | |||||||||||
//paint->begin(this); | |||||||||||
QPen pen; | |||||||||||
pen.setColor(QColor(255,0,0)); //设置画笔为红色 | |||||||||||
paint->setPen(pen); //选择画笔 | |||||||||||
paint->drawEllipse(200,200,200,200); //用该红色画笔画一条线,起点(0,0),终点(100,100) | |||||||||||
//paint->end(); | |||||||||||
} | |||||||||||