QWidget::paintEvent 被调用的场景

一般情况下,若通过Qt实现绘图,需要重写此函数。

Qt助手给出如下解释:

void QWidget::paintEvent ( QPaintEvent * event ) [virtual protected]
This event handler can be reimplemented in a subclass to receive paint events passed in event.


A paint event is a request to repaint all or part of a widget. It can happen for one of the following reasons:


1) repaint() or update() was invoked,   (此时可通过定时器关联update槽,间接实现对paintEvent 函数的调用)

   例子如下:


class OvenTimer : public QWidget
{
    Q_OBJECT
 
public:
    OvenTimer(QWidget *parent = 0);
 
    void setDuration(int secs);
    int duration() const;
    void draw(QPainter *painter);
 
signals:
    void timeout();
 
protected:
    void paintEvent(QPaintEvent *event);
    void mousePressEvent(QMouseEvent *event);
 
private:
    QDateTime finishTime;
    QTimer *updateTimer;
    QTimer *finishTimer;
};

    .cpp 

OvenTimer::OvenTimer(QWidget *parent)
    : QWidget(parent)
{
    finishTime = QDateTime::currentDateTime();
 
    updateTimer = new QTimer(this);
    connect(updateTimer, SIGNAL(timeout()), this, SLOT(update()));


通过上面的信号槽关系,即间接的调用了paintEvent 函数。因此只需要实现paintEvent 函数即可。


2) the widget was obscured and has now been uncovered, or (重新实现一个widget时也会导致对对paintEvent 函数的调用)

     例子如下:

        

class MyWidget : public QWidget
{
  Q_OBJECT
 
public:
    MyWidget(QWidget *parent=0);
    ~MyWidget();
 
    void paintEvent(QPaintEvent *event);
};

只需要重新实现paintEvent即可。


3)many other reasons.
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值