Qt - 这句话是什么意思

时间:2011-04-26 17:11:24

标签: qt widget clipped

在以下网页上: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.

这句话是什么意思?

感谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

首先关闭:对于Qt> = 4.1,句子的第二部分不再为真,其中父可能在其子女后面绘画。

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

在Qt中,可以使用optionally be clipped方法绘制QPainter,但绘图总是被您正在操作的QPaintDevice隐式修剪。 QWidgetQPaintDevice,因此,在其QWidget::rect()之外绘画将无效(=它将被裁剪为rect())。

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

autoFillBackground == false情况下,子窗口小部件不再删除父图形作为其背景,除非它们实际绘制的位置。以QLabel为例:使用autoFillBackground == false,它只是绘制文本,让父母的绘图作为标签的背景照亮。