Qt ограничивающий прямоугольник / форма для взаимодействия с элементом

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

Недавно я хотел изменить свои прямоугольники на горизонтальные линии (лучше визуально), поэтому я написал:

QRectF myRect(-15, 0, 30, 1);

Вместо обычного прямоугольника. Проблема в том, что теперь очень сложно отследить мои провода, потому что пользователь должен связать 2 строки мышью, что практически невозможно.

Я пытался изменить ограничивающий прямоугольник / форму, но ни один из них не работает:

QRectF Port::boundingRect()
{
return QRectF(-15, 0, 30, 10);
}

QPainterPath Port::shape()
{
QPainterPath path;
path.addRect(-15, 0, 30, 10);
return path;
}

Я думаю, что проблема заключается в том, что ограничивающий прямоугольник & Форма используется только для выбора.
Я также пытался использовать изображение (отчаянное решение), но я не могу найти способ добавить изображение / растровое изображение в мой QpainterPath.

Я знаю, что могу использовать линию вместо плоского прямоугольника, но проблема все та же.

Спасибо за помощь 🙂

3

Решение

  1. Использовать QPainterPath для контрольного прямоугольника, как вы упомянули
  2. Получите Конечные точки Провода в QPointF(Две точки)

  3. использование bool QPainterPath::contains(const QPointF & point)проверить, находится ли провод в пределах QPainterPath (Две проверки для начальной и конечной точки провода)

или это в случае проволочного изображения, которое перетаскивают,

  1. Использовать QPainterPath для контрольного прямоугольника
  2. Если провод это изображение, получите QRect провода используя QPixMap::rect()
  3. использование bool QPainterPath::contains(const QRectF & rectangle) проверить, находится ли провод в пределах QPainterPath
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector