在以下网页上: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.
这句话是什么意思?
感谢。
答案 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
隐式修剪。 QWidget
是QPaintDevice
,因此,在其QWidget::rect()
之外绘画将无效(=它将被裁剪为rect()
)。
现在,关于句子的第二部分:在较旧的Qt版本中,子窗口小部件将首先用背景颜色/图像填充其区域,从而有效地将父绘制剪切到所有子几何的并集之外。从Qt 4.1开始,可以通过将QWidget::autoFillBackground
属性设置为false
来禁用此行为。实际上,这也恰好是新的默认值。
在autoFillBackground == false
情况下,子窗口小部件不再删除父图形作为其背景,除非它们实际绘制的位置。以QLabel
为例:使用autoFillBackground == false
,它只是绘制文本,让父母的绘图作为标签的背景照亮。