Qt - Что подразумевается под этим предложением - PullRequest
1 голос
/ 26 апреля 2011

На следующей веб-странице: 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 ]

3 голосов
/ 26 апреля 2011

Qt имеет концепцию родительских / дочерних виджетов. Родительский виджет - это контейнер дочернего виджета, вплоть до виджета главного окна. Так что это просто говорит о том, что виджет будет обрезан его родительским (контейнерным) виджетом. Это означает, что он не выйдет за пределы границ своего родителя, но будет отключен, если выйдет за пределы. Аналогично, виджет обрезается любыми виджетами перед ним.

2 голосов
/ 27 апреля 2011

Первое: вторая часть предложения больше не верна для Qt> = 4.1, где родитель может рисовать позади своих потомков.

В графике отсечение описывает ограничение картины в данной области.Например, если вы нарисовали линию от (0,0) до (100,100) с отсеченным прямоугольником (50x50)@(0,0), вы фактически нарисуете линию только от (0,0) до (50,50), т.е.все пиксели, которые были бы нарисованы, но лежали вне области отсечения, были отброшены.

В Qt рисование может опционально обрезаться , используя QPainter методы,но картина всегда неявно ограничена QPaintDevice, над которым вы работаете.QWidget - это QPaintDevice, поэтому рисование вне его QWidget::rect() не будет иметь никакого эффекта (= оно будет обрезано до rect()).

Теперь о второй части предложения: В более старых версиях Qt дочерние виджеты сначала заполняли свою область цветом / изображением фона, таким образом эффективно вырезая рисунок родителя за пределами объединения всех геометрий детей.Начиная с Qt 4.1, это поведение можно отключить, установив для свойства QWidget::autoFillBackground значение false.В самом деле, это тоже новое значение по умолчанию.

В случае autoFillBackground == false дочерние виджеты больше не стирают рисунок родителя, выступающий в качестве их фона, за исключением случаев, когда они фактически рисуют.Возьмите QLabel в качестве примера: с autoFillBackground == false он просто закрашивает свой текст, оставляя рисунок родителя, чтобы просвечивать как фон метки.

...