2009-09-30 154 views
6

無論何時單擊一個選項卡並需要對該特定選項卡作出反應,我都需要顯示一個上下文菜單。有沒有辦法做到這一點,而不是繼承它?QTabWidget選項卡上下文菜單

回答

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

你的第一個簡單的解決方案不會按他的意願工作。在當前選項卡上完成鼠標點擊後,將不顯示上下文菜單。 唯一的解決方案似乎是你的第二個解決方案。 – 2009-09-30 08:58:12

0

我認爲你需要創建自己的類,它繼承自QTabWidget並重寫MousePressEvent(QMouseEvent)保護功能,您可以在其中右鍵單擊創建上下文菜單。

+0

-1因爲他特別要求一種方法來實現他想要的,而不需要繼承QTabWidget。 – 2009-09-30 08:52:39

+2

如果他不熟悉installEventFilter,繼承是一種更簡單的方法。但讓他先試試你的第二個解決方案。 – 2009-09-30 09:00:52