私のアプリケーションでは、 のQGraphicsView
チェックを再実装mouseReleaseEvent()
し、マウスの位置にあるアイテムにイベントを処理するように伝えています。
私のQGraphicsItem
ビューは他の 2 つの で構成されており、2 つのQGraphicsItems
うちどちらがクリックされているか (またはボタンが離されているか) を確認し、それぞれのイベントを処理します。
ウィジェットのコンストラクターで、アイテムがリリースを検出したときに使用したのと同じメソッドを使用して、アイテムの 1 つをデフォルトで選択済みとして設定します。
デバッグしたところLabelItem
、コンストラクターから select が問題なく呼び出されることがわかりました (アプリケーションを最初に起動したときに結果が明確になります)。しかし、アイテムをクリックすると、アプリケーションが終了します。選択機能に入ったが、そこから離れていないことがわかりました。問題はここにあります。
select 関数は 1 行のセッターにすぎないため、これは非常に奇妙です。
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);
}
}
}
関数内の行をコメントアウトすると、エラーは発生しませんでした。他の CheckBoxItem についてはデバッグしていませんQGraphicsItem
が、アプリケーションはそのイベントでも終了します。問題が関連している可能性があると思うので、select
今のところに集中しています。
何がこれを引き起こしたのか、なぜこれが起こっているのか、私にはまったく手がかりがありません。私の過去の経験から、それは私が愚かに考えていない単純なものであると確信していますが、何を理解することはできません.
助けていただければ幸いです。