Qt - Что подразумевается под этим предложением

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

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

Во-первых: вторая часть предложения больше не верна для 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, он просто рисует свой текст, оставляя рисунок родителя просвечивать как фон метки.

Другие вопросы по тегам