在以下网页: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.
这样的句子是什么意思?
谢谢。
Qt有父/子小部件的概念。父小部件是子小部件的容器,一直到主窗口小部件。因此,这只是说一个小部件将被其父(容器)小部件剪切。这意味着它不会超越母体的界限,但如果超越就会被切断。同样,小部件也可以被前面的小部件剪切。
首先:句子的第二部分在Qt>= 4.1中不再成立,父可以在其子
绘制。在图形学中,剪贴描述了将绘画限制在给定区域内。例如,如果你用(50x50)@(0,0)
的剪切矩形从(0,0)
到(100,100)
画一条线,你只会有效地从(0,0)
到(50,50)
画一条线,即。所有本该被绘制但位于剪切区域之外的像素都被丢弃。
在Qt中,可以选择使用QPainter
方法剪切绘画,但绘画总是由您操作的QPaintDevice
隐式剪切。QWidget
是QPaintDevice
,因此,在QWidget::rect()
之外绘制将没有效果(=它将被剪切到rect()
)。
现在,关于句子的第二部分:在旧的Qt版本中,子部件将首先用背景颜色/图像填充它们的区域,从而有效地将父部件的绘画剪切到所有子部件的几何图形的联合之外。从Qt 4.1开始,可以通过将QWidget::autoFillBackground
属性设置为false
来禁用此行为。事实上,这恰好也是新的默认值。
在autoFillBackground == false
的情况下,子部件不再擦除父部件作为其背景的绘图,除非它们实际绘制。以QLabel
为例:对于autoFillBackground == false
,它只绘制其文本,让父元素的绘图作为标签的背景。