내 응용 프로그램에서 mouseReleaseEvent()
을 확인하고 이벤트를 처리 할 위치에있는 항목을 알려주는 내용으로 다시 구현했습니다 (QGraphicsView
).Qt 응용 프로그램의 이상한 버그
내보기의 QGraphicsItem
은 다른 두 개의 QGraphicsItems
으로 구성되어 있으며 둘 중 어느 쪽을 클릭했는지 (또는 버튼을 놓은 상태로) 확인하고 해당 이벤트를 처리합니다.
내 위젯의 생성자에서 아이템이 출시를 감지 할 때 사용한 것과 동일한 방법을 사용하여 기본적으로 선택한 항목 중 하나를 설정합니다.
내가 디버그했을 때, LabelItem
에 대해 select가 생성자에서 문제없이 호출되었으며 (처음 응용 프로그램을 시작할 때 결과가 분명 함) 발견되었습니다. 그러나 항목을 클릭하면 응용 프로그램이 종료됩니다. 내가 select 함수로 들어가는 것을 보았지만 그것을 남기지 않았다. 문제는 여기에 있습니다.
select 기능이 단지 한 줄 짜리기이기 때문에 매우 이상합니다.
void LabelItem::select()
{
selected = true;
}
이것은 입니다.
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
에 집중하고 있습니다.
나는 무엇이이 문제를 일으킬 수 있었는지, 왜 이런 일이 일어나고 있는지에 대한 단서가 전혀 없습니다. 나의 과거 경험에서, 나는 그것이 어리 석음을 생각하지 않는 단순한 무언가이다라고 꽤 확신한다. 그러나 나는 무엇을 이해할 수 없다.
도움말 정말 감사하겠습니다.
'mouseReleaseEvent()'함수의 코드를 보여줄 수 있습니까? – alexisdm
null 또는 유효하지 않은'this' 포인터를 역 참조하려고하는 경우이 동작이 발생합니다. 내 말은, null 또는 유효하지 않은 객체에 대해'select'를 호출 할 수 있으며 할당에서'this'를 참조 해제 할 수 있습니다. – Lol4t0