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