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.

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

Спасибо за помощь :)


person Tarask    schedule 20.07.2015    source источник


Ответы (1)


  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
person techneaz    schedule 20.07.2015