Как получить событие клика из QGraphicsItem, получив уведомление о focusOut - PullRequest
3 голосов
/ 29 июля 2011

У меня есть класс, реализованный из QGraphicsItem, называемый Node.

У меня есть "Node" в форме прямоугольника, и я могу что-то сделать, когда пользователь щелкнет по нему

Я использую события mousePress и mouseRelease.

но я хочу получать уведомления, когда пользователь нажимает "из" прямоугольника.

Я пытался реализовать эти функции:

Qt Code:

void Node::focusInEvent ( QFocusEvent * event){
cout<<"in"<<endl;
update();

QGraphicsItem::focusInEvent(event);
}
void Node::focusOutEvent ( QFocusEvent * event ){
cout<<"out"<<endl;
update();
QGraphicsItem::focusOutEvent(event);

}
void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event){
cout<<"out"<<endl;
}

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

или как объект "Узел" может узнать, если щелкнул другой объект Узел?

также мне интересно, гуглил, но не смог найти, когда срабатывает focusinevent и focusoutevent? Я думаю, что focusOutEvent должен работать, когда я нажал на элемент, а затем на элемент, я не прав?

спасибо за идею.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

При построении узлов вам необходимо сделать следующее:

setFlag( QGraphicsItem::ItemIsFocusable );
setAcceptHoverEvents( true );

Первая строка делает ваш предмет действительно способным получать фокус, а вторая делает так, чтобы ваш элемент был уведомлен о событиях мыши.

1 голос
/ 29 июля 2011

Вы вызывали setFlags метод вашего графического элемента с помощью QGraphicsItem :: ItemIsSelectable или QGraphicsItem :: ItemIsMovable ?

Согласно QT док.

По умолчанию флаги не включены.

...