Получить QGraphicsItem по положению мыши в QGraphicsScene - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь соединить две QGraphicsItems по прямой линии (QGraphicsLineItem); щелкнув средней кнопкой мыши по первому объекту, затем наведите курсор мыши на второй объект и после того, как я отпущу его, он должен провести линию между ними.

Эта функция должна соединять эти элементы.

void GraphicsBlock::connectBlocks(GraphicsBlock *block)
{
    GraphicsConnect *connection = new GraphicsConnect(); //Class with QGraphicsLineItem
    connection->line->setLine(QLineF(this->pos(), block->pos()));
}

Я работаю над одной сценой, и у меня проблема с нахождением второго блока по позиции мыши. Функция mousePressEvent должна работать с этим кодом:

if(event->button() == Qt::MiddleButton)
    Connecting == true;

и после этого mouseReleaseEvent

if(Connecting)
{
    //Get object by mouse position here
    //this.connectBlocks(..)
    Connecting = false;
}

Я пытался scene->itemsAt(mouse.x(), mouse.y(), QTransform()) и

scene->items(QPointF(mouse.x(),mouse.y()) но он всегда возвращает пустой список .

EDIT: Вот как должно работать приложение, синий эллипс - это нажатие на порт, теперь я должен перетащить (все еще мышь вниз) на другой порт и отпустить мышь.

Application image

1 Ответ

0 голосов
/ 03 мая 2018

Я решил это с

QGraphicsItem *item = scene.itemAt(mapToScene(event->pos()), QTransform());

в функции mouseReleaseEvent

...