在Qt Widget中使用QPainter之外的引擎进行绘图

本文探讨在Qt Widget中使用QPainter之外的绘图引擎,如利用QPainter::beginNativePainting()和endNativePainting()进行原生绘图,但遇到闪烁问题。同时,提到了自定义paintEngine()和QpaintDevice的方法,以实现更复杂的绘图需求。参考代码可在QtAV项目的templates目录下的vo.h和vo.cpp找到。
摘要由CSDN通过智能技术生成
    最近在给自己的播放器(https://github.com/wang-bin/QtAV)加写非QPainter的渲染方式,解决了一些以前没碰到过的问题。
    在QWidget中使用其他方式绘图,比如direct2d,gdi等(我刚学的)
   1. 重载paintEvent,里面加入自己的绘图代码。这个大家都想得到
   2. 重载QWidget::paintEngine() 返回0
    不然画面会闪烁。可以看文档,也可以看看这个原始出处(从谈话内容看应该是的,之前无法实现的):http://lists.trolltech.com/qt4-preview-feedback/2005-04/thread00609-0.html 
    windows下Qt提供了QPainter::paintEngine()->getDC(),如果使用这个而不是windows的GetDC()的话可以不重载paintEngine(),因为QPainter的时自动双缓冲的。
    3. 设置QWidget的属性  setAttribute(Qt::WA_PaintOnScreen, true)
    文档里说这个属性设置后可以用native engine来绘图。测试了下如果不设这个属性就会闪烁。(如果你在用gdi绘图并用上面说的QPainter::paintEngine()->getDC(),那么就不要设这个属性)
    4. 重载showEvent()。窗口置顶状态改变之类的要重新进行某些相应的初始化工作。比如gdi绘图的话要重新用GetDC()获取device context,direct2d的话要重新创建renderer target,因为他们是和窗口绑定的,而文档里说(windows)置顶状态改变会重新设定parent什么的
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值