syncRegions:此函数主要是向客户端发送RegionModified事件,真正的绘图也是由客户端来完成。 还是通过代码来分析:

void QWSServer::syncRegions( QWSWindow *active )

{

    rgnMan->commit();   //拷贝数据到一段共享内存,服务器为读写权限,客户端为只读

    notifyModified( active );//通过客户端显示区域已更改,客户端绘制相关区域

    paintBackground( dirtyBackground );//绘制背景区域修改部分。

    dirtyBackground = QRegion();

}

void QWSServer::notifyModified( QWSWindow *active )

{

    // notify active window first

    if ( active )

active->updateAllocation();    //首先通知active 窗体 

    // now the rest //通知所有modified标志为TRUE的窗体

    for (uint i=0; i<windows.count(); i++) { 

QWSWindow* w = windows.at(i);

w->updateAllocation();      

    }

}

void QWSWindow::updateAllocation()

{

    if ( modified || needAck) {

c->sendRegionModifyEvent( id, exposed, needAck );  // 发送消息

exposed = QRegion();                                  //复位低级窗体新增显示区域

modified = FALSE; //modified为真表示窗体的显示区域被修改。

needAck = FALSE;

    }

}

QT显示机制3_QTQT显示机制3_QT