在以下网页: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.
这样的句子是什么意思?
谢谢。
在以下网页: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,其中父母可以在其孩子后面绘画。
在图形中,剪裁描述了将绘画限制在给定区域内。例如,如果您使用 的剪切矩形从(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
,它仅绘制其文本,而将父级的绘图作为标签的背景闪耀。