2009-09-30 26 views

答えて

5

簡単な方法が、おそらくない正確に何が必要:

  1. 接続信号に接続されているスロットにあなたのQTabWidget
  2. の「currentChanged」信号には、QMenuを作成し、それを移入
  3. 最後に、信号に接続されているスロットに、QMenu :: Execの呼び出し(QCursor :: POS())

を、必要に応じてこれはタブが変更されるたびに呼び出される関数(ないneceを取得します)と は、現在のマウス位置にメニューを生成します。

正確にあなたが記述何が複雑な方法、:あなたのQTabWidgetの

  1. コールQObject::installEventFilter、あなたのQTabWidget上のすべてのイベントが独自のオブジェクトにリダイレクトされるように。
  2. オブジェクトには、QObject::customEventを再実装し、すべてのQMouseEventイベントを処理します。
  3. 必要に応じてQMenuを設定し、処理しているQMouseEventの位置でQMenu :: execを呼び出します。
+0

あなたの最初の簡単な解決策は、彼が望むように動作しません。コンテキストメニューは表示されません。現在のタブでマウスクリックが行われます。 唯一の解決策は、あなたの2番目の解決策です。 –

0

QTabWidgetから継承する独自のクラスを作成し、右クリックしてコンテキストメニューを作成できるMousePressEvent(QMouseEvent)保護機能をオーバーライドする必要があると思います。

+0

-1なぜなら、彼はQTabWidgetをサブクラス化せずに自分が望むものを達成するための方法を尋ねてきたからです。 –

+2

もし彼がinstallEventFilterに慣れていないなら、継承は簡単な方法です。しかし、まずは彼の2番目の解決策を試してみましょう。 –

関連する問題