• 3508阅读
  • 7回复

[讨论]Qt如何把QPainter绘图对象作为参数传递给业务类,由业务类完成绘图操作? [复制链接]

上一主题 下一主题
离线ustone
 

只看楼主 倒序阅读 楼主  发表于: 2018-05-15

Qt如何把QPainter绘图对象作为参数传递给业务类,由业务类完成绘图操作?
比如在窗体类中new一个业务类,把QPainter绘图对象作为业务类构造函数的参数传递进去,在业务类的多个成员函数中完成不同的绘图操作,大概要怎么弄?
离线ustone

只看该作者 1楼 发表于: 2018-05-15
我用另一种办法解决了,绘制到QPixmap上,label->setPixmap()显示之,两者指针都作为参数传给业务类构造函数。
离线ustone

只看该作者 2楼 发表于: 2018-05-16
回 ustone 的帖子
ustone:我用另一种办法解决了,绘制到QPixmap上,label->setPixmap()显示之,两者指针都作为参数传给业务类构造函数。 (2018-05-15 11:25) 

这种办法,QTimer定时器里调用大量重绘的话,性能很差亚,画面更新不流畅,进程占用CPU超过20%(笔记本三代i5四线程CPU,换算成单线程超过80%)。
同样的测试程序,用C++ Builder改写的,画面流畅,进程占用CPU仅1%~3%(编译选项未优化)。

不知道直接绘制到QPainter对象上性能会不会好点,
问题还是Qt如何把QPainter绘图对象作为参数传递给业务类,由业务类完成绘图操作?
离线jigetage

只看该作者 3楼 发表于: 2018-05-16
有位置参数,QPainter在哪里绘制不都一样吗
离线ustone

只看该作者 4楼 发表于: 2018-05-16
回 jigetage 的帖子
jigetage:有位置参数,QPainter在哪里绘制不都一样吗 (2018-05-16 10:33) 

QPainter(this)对象只能在paintEvent函数中绘制。
离线一米阳光

只看该作者 5楼 发表于: 2018-05-17
图形数据可以保存起来,传递给业务类,业务类进行绘图(在Qt里面定义一个结构体,用来保存图形数据即可)
离线ustone

只看该作者 6楼 发表于: 2018-05-17
回 一米阳光 的帖子
一米阳光:图形数据可以保存起来,传递给业务类,业务类进行绘图(在Qt里面定义一个结构体,用来保存图形数据即可) (2018-05-17 10:32) 

不是这个问题~
离线ustone

只看该作者 7楼 发表于: 2018-05-18
我那个程序改成整个刷新重绘了,在paintEvent里以QPainter(this)引用为参数调用业务类的绘制函数,CPU占有率降低到0,偶尔1。
快速回复
限100 字节
 
上一个 下一个