1

在以下网页:http ://web.mit.edu/qt-dynamic/www/tutorials-tutorial-t3.html

提到以下句子:

A widget is clipped by its parent and by the widgets in front of it.

这样的句子是什么意思?

谢谢。

4

2 回答 2

3

Qt 有父/子小部件的概念。父小部件是子小部件的容器,一直到主窗口小部件。所以这只是说一个小部件将被它的父(容器)小部件剪裁。这意味着它不会超出其父级的边界,但如果超出则将被切断。同样,一个小部件被它前面的任何小部件剪裁。

于 2011-04-26T17:22:21.487 回答
2

首先:句子的第二部分不再适用于 Qt >= 4.1,其中父母可以在其孩子后面绘画。

在图形中,剪裁描述了将绘画限制在给定区域内。例如,如果您使用 的剪切矩形从(0,0)to绘制一条线,您将有效地仅从to绘制一条线,即。所有将被绘制但位于剪切区域之外的像素都被丢弃。(100,100)(50x50)@(0,0)(0,0)(50,50)

在 Qt 中,可以选择使用QPainter方法对绘画进行剪辑,但绘画总是由QPaintDevice您正在操作的 隐式剪辑。QWidget是 a QPaintDevice,因此,在它之外的绘画QWidget::rect()将没有效果(= 它将被剪裁为rect())。

现在,关于句子的第二部分:在较旧的 Qt 版本中,子小部件将首先用背景颜色/图像填充它们的区域,从而有效地将父级的绘画裁剪到所有子级几何图形的联合之外。QWidget::autoFillBackground从 Qt 4.1 开始,可以通过将属性设置为 来禁用此行为false。事实上,这也恰好是新的默认设置。

在这种autoFillBackground == false情况下,子小部件不再擦除作为背景的父绘图,除非它们实际绘制的位置除外。以 aQLabel为例:使用 时autoFillBackground == false,它仅绘制其文本,而将父级的绘图作为标签的背景闪耀。

于 2011-04-26T20:50:39.303 回答