在我的应用程序中,我重新实现QGraphicsView
了检查 a mouseReleaseEvent()
,然后告诉鼠标所在位置的项目来处理事件。
我的QGraphicsItem
视图由另外两个组成QGraphicsItems
,我检查两个中的哪一个被单击(或者更确切地说是释放按钮),并处理相应的事件。
在我的 Widget 的构造函数中,我将其中一个项目设置为默认选中,使用的方法与项目检测到发布时使用的方法相同。
调试的时候,发现对于LabelItem
, select 从构造函数中调用没有问题(并且在我第一次启动应用程序时结果很清楚)。但是,当我单击这些项目时,应用程序将终止。我看到我正在进入选择功能,但没有离开它。所以问题就在这里。
这很奇怪,因为 select 函数只是一个单行设置器。
void LabelItem::select()
{
selected = true;
}
这是mouseReleaseEvent
;
void LayerView::mouseReleaseEvent(QMouseEvent *event)
{
LayerItem *l;
if(event->button() == Qt::LeftButton)
{
l = (LayerItem *) itemAt(event->pos());
if(l->inLabel(event->pos()))
{ //No problem upto this point, if label is clicked on
l->setSelection(true); //in setSelection, I call select() or unselect() of LabelItem,
//which is a child of LayerItem, and the problem is there.
//In the constructor for my main widget, I use setSelection
//for the bottom most LayerItem, and have no issues.
emit selected(l->getId());
}
else if(l->inCheckBox(event->pos()))
{
bool t = l->toggleCheckState();
emit toggled(l->getId(), t);
}
}
}
当我在函数中注释掉该行时,我没有错误。我还没有为另一个QGraphicsItem
CheckBoxItem 进行调试,但应用程序也终止了它的事件。我认为这个问题可能是相关的,所以我现在专注于select
。
我完全不知道是什么原因导致了这种情况以及为什么会发生这种情况。根据我过去的经验,我很确定这是我愚蠢地没有想到的简单事情,但我不知道是什么。
帮助真的很感激。