QT 画线嵌套问题

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();         
            
}           
            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值