在paintEvent实现中绘制什么?

时间:2015-08-05 18:20:30

标签: qt

Qt的文档说:

许多小部件可以在被要求时简单地重新绘制整个表面,但是一些缓慢的小部件需要通过仅绘制所请求的区域进行优化:QPaintEvent :: region()。此速度优化不会更改结果,因为在事件处理期间将绘制剪切到该区域。例如,QListView和QTableView就是这样做的。

这是否意味着当我编写一个QWidget的paintEvent函数时,没有必要手动编写关于应该绘制哪个部分的小部件的代码,它是否全部由qt本身自动处理? / p>

1 个答案:

答案 0 :(得分:1)

  

当我编写一个QWidget的paintEvent函数时,没有必要手动编写关于应该绘制小部件的哪些部分的代码[?]

那是对的。传递给你的画家已被剪裁到你的小部件的矩形,所以你不能在你的小部件外面画画。如果您的绘画很便宜,那么您当然可以立即重绘整个小部件,并忽略在绘制事件中传递的重绘矩形或区域。

你也不应盲目地认为只绘制小部件的一部分会以某种方式固有地更快。你必须衡量这一点!

  

你能解释一下关于痛苦事件传播方向的更多信息吗,通常qt的事件会像孩子一样传播到父母那里,但痛苦的事件是不同的?

需要绘制的所有小部件都被绘制。事件不会传播,它会在窗口小部件合成器的指导下直接传递给相关的窗口小部件。

  

[...]当调用Child小部件的paintEvent时,它也会调用其Parent小部件的paintEvent。这是为什么?

正好会绘制两个单独的小部件。仅仅因为他们碰巧是父母,孩子并不是很重要。每个小部件都孤立地关注它的绘制事件。小部件合成器(后备存储)具有全局。如果父母在孩子被涂上之前看似没有理由而被涂漆,那么孩子可能不透明并且父母被涂上颜料以便孩子可以在其上面进行复合。设置Qt::WA_OpaquePaintEvent如果您的paintEvent做不透明的绘画,并且通过绘制的内容不会看到父级的任何部分。