关于QT的Layout和Paint

本文不是想分析Qt源码的具体代码,一个是本人能力还没达到那个地步,而且着实没时间认真研究QT(因为你懂的Android。。。),由于项目需要所以稍微了解了下QT的view体系。大概的将我了解到的要点罗列一下,这样子如果需要研究源码的时候就有方向(其实我也是怕自己忘记)。

QT的paint的过程是依赖事件驱动的。在需要渲染时触发QEvent::Paint事件。然后QObject及其继承类比如特别得QWidget中捕获这个事件,调用QWidget及其继承类的paintEvent()方法。然后其中调用QStyle的方法绘制具体的比如直线,pixmap等。Qstyle对于不同的机器比如window,Linux有不同的实现。在QStyle中调用QPaint的方法实现最后的绘制。恩可以看到这个跟Android的draw就很像了。

以QLabel为例调用过程:

对于QT中layout的实现,可以看到他的基类是QLayout,其他的Layout比如GrideLayout继承于QLayout。在GrideLayout中最重要的函数是:setGeometry(),他的功能有点类似Android中的layout()。


QQuickGrid,QQuickRow,QQuickFlow,QQucikColumn都继承自QQuickBasePositioner。在QQuickBasePositioner的prePositioning()中遍历View的所有子View,并调用子类实现的doPositioning(&contentSize)方法实现具体的布局。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值