2012-04-06 7 views
1

これは、QGraphicsItemのmouseReleaseEventまたはQContextMenuから起動するすべてのQDialog Iポップで発生しました。私は、問題が何であるかが表示されない - コードは非常に簡単です。..mouseReleaseEvent RightClickから起動したQDialogを閉じると、空のコンテキストメニューが表示されます

... 
void MyQGfxItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) 
{ 
    if(event->button() == Qt::RightButton) 
    { 
     MyDialog someDlg; 
     if(someDlg.exec()) 
     { 

     } 
    } 
} 
... 

とすぐにダイアログがイベントがトリガされた場所の空のコンテキストメニューが表示され、OKを介して、またはキャンセルのいずれか、閉じているよう:

enter image description here

空白の項目は私のQDockWidgetが非表示または表示されている場合..何が起こっているすべてのアイデアを制御するようですか?数多くのGoogleの検索が私を残しました。

編集 - マウスの右ボタンを使用している場合にのみ発生するように見える。..

+0

イベントを受け入れましたか?たとえば、mouseReleaseEventでは、event-> accept()を呼び出します。 – Anthony

+0

生のマウスイベントを使用するのではなく、カスタムコンテキストメニューを使用していないのはなぜですか? – alexisdm

+0

問題は、コンテキストメニューが表示されないようにすることです。右クリックは何らかの理由でQDockWidgetを制御する "空の"コンテキストメニューを表示しています – giraffee

答えて

0

ハ!とった。 QMainWindowがすべて終了した後、イベントを右クリックするような感じです。 QMainWindowでthis-> setContextMenuPolicy(Qt :: NoContextMenu)を呼び出すと、それが抑制されました。

+0

これはちょっとハックです。メインウィンドウにコンテキストメニューが必要な場合はどうすればいいですか?おそらく、イベントがそれを伝播している理由を把握し、それを伝播し続けるのではなく、最後にコンテキストメニューを完全にブロックするだけの価値があります。 – Anthony

+0

私のコードでは、QDockWidgetを制御する空の項目でコンテキストメニューを定義していますが、どこから来るのか分かりません。 – giraffee

+0

@David:QMainWindowにQDockWidgetを追加すると、QDockWidgetの名前に一致する項目がQMainWindowコンテキストメニューに追加され、その表示が切り替わります。あなたがQDockWidgetのコンストラクタに名前を渡さなかったので空白です。 – Bill

2

QEventのためのドキュメントによると、あなたは親ウィジェットに伝播したくない()イベントを受け入れる必要があります。だから、どこかmouseReleaseEventで、あなたはあまりにも、あなたも、あなたのmousePressEventにこのコードを配置する必要があるかもしれません

event->setAccepted(true); 

または

event->accept(); 

注意を追加する必要があります。

+0

試してみました - そのコンテキストメニューはまだ起動します – giraffee

関連する問題