2017-03-11 7 views
0

아이디어는 사용자가 도형을 클릭하고 도형의 정보가 테이블에 표시된다는 것입니다. 사용자가 도형을 선택하면 (마우스를 도형 위로 드래그하면) 잘 작동합니다. 나는이 코드를 수정하여 그 동작을 수행하려고 노력하고 있지만 운이 좋지는 않다.클릭 한 QGraphicsItem에서 정보를 얻는 방법?

나는에서 AA 전화를 가지고 : 이것은 내가 선택 모드 뭘하는지입니다

void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); 

마우스 내가 데이터를 업데이트합니다 해제 될 때 :

//enter the mode for selecting 
if(theMode == SelectObject){ 

if (this->items().isDetached()){ 

//we check if the object is selected 
    if (this->selectedItems().isEmpty()){ 
     qDebug() << "not selected"; 
     isSelected = false; 
     return; 
    } 

//we get a list of the shapes 
    QList<QGraphicsItem*> stackOfShapes = this->items(); 

//we get index of selected shape 
    QGraphicsItem *selected = this->selectedItems().first(); 
    int indexOfShape = stackOfShapes.indexOf(selected); 

//we see which shape is (For a Rectangle) 

    switch (selected->type()) { 

     case 346: 
     { 
     updateDataOfRect(); 
     } 
      break; 
    } 

} 

문제를 그 :

//we get index of selected shape 
QGraphicsItem *selected = this->selectedItems().first(); 

도형을 클릭하지 않은 경우 어떻게해야합니까?

은 내가 mousePressEvent의 형태의 서브 클래스를 수정하려고 :

if (event->button() == Qt::MouseButton::LeftButton) { 
     this->setSelected(true); 
} 

어느 한 도움이 해결책을 찾기 위해 수 있습니까?

감사합니다.

답변

0
QList<QGraphicsItem *> QGraphicsView::items(const QPoint &pos) const 

뷰에서 pos의 위치에서 모든 항목의리스트를 돌려줍니다. 항목은 내림차순으로 나열됩니다. 즉, 첫 번째 항목은 이며, 목록은 최상위 항목이고 마지막 항목은 최하위 항목입니다. pos는 뷰포트 좌표계에 있습니다. QGraphicsView::mousePressEvent() 과부하에 의한

사용 예 :

void CustomView::mousePressEvent(QMouseEvent *event) { 
    qDebug() << "There are" << items(event->pos()).size() 
      << "items at position" << mapToScene(event->pos()); 
} 
+0

좋아요 ... 지금은 노력하고, 내가 인덱스를 얻을 수 있습니다. :) – sgbzona