В графической сцене, как сделать прозрачным перекрывающийся объект? - PullRequest
0 голосов
/ 26 июня 2018

В графическом представлении m, устанавливающем сцену, в которой при добавлении объектов (путем перетаскивания) я могу перемещать эти элементы мышью, когда я перемещал один объект на другой объект, перемещаемый объект должен быть прозрачным. как я могу это сделать?

1 Ответ

0 голосов
/ 26 июня 2018

Я не верю, что вы на самом деле хотите полной прозрачности, так как это сделает невозможным визуальное распознавание прозрачного объекта в дальнейшем. Уменьшенная непрозрачность - да.

Что касается вашего вопроса: у каждого элемента в вашей сцене есть ограничивающий прямоугольник (или другой тип ограничивающей области). Вы можете легко получить его, позвонив по номеру boundingRect() вашего предмета. Возвращенное значение QRectF (как и QRect) имеет функцию bool QRect::intersects(const QRect &rectangle) const, которая принимает другой прямоугольник и проверяет наличие столкновения.

Всякий раз, когда вы перемещаете указатель мыши при перетаскивании элемента, вам нужно перебирать все или только подмножество всех элементов вашей сцены (под подмножеством я подразумеваю только элементы в определенном регионе, чтобы повысить производительность) и проверять столкновение , Если обнаружено столкновение, вы можете изменить либо элемент, который вы перетаскиваете, либо элемент под ним.

Конечно, чтобы убедиться, что один элемент покрывает другой, вам также необходимо проверить значение Z. Самый простой способ сделать это - сохранить все не перетаскиваемые объекты на одном и том же уровне Z, а затем, когда вы перетаскиваете один, увеличивать его уровень Z на единицу, чтобы он был «выше» остальных.

...