2014-11-06 2 views
0

я использовал следующую функцию itemChange из моего собственного подкласса, чтобы вызвать сигнал, как:Функция QGraphicsItem itemChange не совпадает с состоянием элемента?

QVariant WayPointItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) 
    { 
     if (change == QGraphicsItem::ItemSelectedChange){ 
      emit selcState(value.toBool()); 
     } 
     return QGraphicsItem::itemChange(change, value); 
    } 

Сигнал selcState подключается к слоту как:

void WaypointLineItem::toggleText(bool value) 
{ 
    if (wp->isSelected()) //wp is the waypointitem which emit the signal selcState() 
     text.show(); 
    else 
     text.hide(); 
} 

Я обнаружил, что, когда я выбираю waypointitem , он вызывал функцию itemChange, а значение bool QGraphicsItem :: ItemSelectedChange также корректно. Однако, когда дело доходит до слота, wp-> isSelected() возвращает значение, которое отличается. Как это могло случиться, есть ли какое-либо решение?

ответ

0

Вызывается QGraphicsItem::ItemSelectedChange, когда выбранное состояние собирается изменить. Это означает, что новое выбранное состояние находится в параметре value.

Вы должны отреагировать на QGraphicsItem::ItemSelectedHasChanged, где выбранное состояние уже изменено.