2015-07-20 7 views
3

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

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

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

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

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

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

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

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

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

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

ответ

0
  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