2017-03-11 8 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

[OK]を...今、それが働いている、私はインデックスを取得することができます。 :) – sgbzona

関連する問題