如何从点击的QGraphicsItem获取信息?

时间:2017-03-11 06:26:14

标签: qt click qgraphicsitem

这个想法是用户点击一个形状,并在表格上显示形状的信息。如果用户选择形状(将鼠标拖动到形状上),这很有效。我正在尝试修改此代码以执行该操作,但并不幸运。这就是我正在为选择模式做的事情:

我打电话给:

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);
}

任何人都可以帮忙找到解决方案吗?

感谢。

1 个答案:

答案 0 :(得分: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());
}