Qt的绘制是如何发生的

QEvent::WindowDeactivate

当用户鼠标在应用之外时,会触发QEvent::WindowDeactivate事件,

     Qt5Widgetsd.dll!QApplication::setActiveWindow(QWidget * act) Line 2072    C++
     Qt5Widgetsd.dll!QApplicationPrivate::notifyActiveWindowChange(QWindow * previous) Line 2133    C++

对应的父类QWidget的响应事件方法,会先调用自己的update,再遍历所有儿子,并传播该事件给可见儿子

    case QEvent::WindowDeactivate: {
        if (isVisible() && !palette().isEqual(QPalette::Active, QPalette::Inactive))
            update();
        QList<QObject*> childList = d->children;
        for (int i = 0; i < childList.size(); ++i) {
            QWidget *w = qobject_cast<QWidget *>(childList.at(i));
            if (w && w->isVisible() && !w->isWindow())
                QApplication::sendEvent(w, event);
        }
        break; }

而update函数会把自己加到QWidgetBackingStore的dirty

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值