2011-05-23 91 views
1

我正在使用QTableWidget來顯示數據。我知道我可以使用addAction方法來添加上下文菜單。我怎樣才能限制上下文菜單隻有特定的單元格或列? addAction存在QActionGroup QGraphicsWidget QMenu QMenuBar QToolBar QWidget。我應該以某種方式過濾或關閉/啓用信號/插槽?使用右鍵單擊事件?QTableWidget - 僅用於特定單元格/列的上下文菜單

一個類似的問題是如何爲不同的行獲取不同的上下文菜單?

謝謝你,歡呼聲, 馬蒂亞斯

+1

強烈建議您對錶格使用MVC方法。它也將允許您優雅地自定義上下文菜單。 – sep 2011-05-23 10:51:08

回答

2

創建自定義的上下文菜單另一種方法是實現一個槽到QWidget::customContextMenuRequested()信號。您可以在該位置查詢單元格(QTableWidget::itemAt() - 注意全局 - >小部件映射!),然後使用QMenuQAction構建自定義菜單。

此外,我會建立菜單(s)預先,而不是隻有exec()它在槽中。

請記住,您必須將小部件的QWidget::ContextMenuPolicy屬性更改爲Qt::CustomContextMenu

+1

謝謝你的回答。聽起來不錯。不幸的是我無法啓動它的工作。 'TableView-> setContextMenuPolicy(Qt :: CustomContextMenu);'和'connect(TableView,SIGNAL(customContextMenuRequested()), this,SLOT(on_TableView_ContextMenuRequest()));';當然這個插槽也是被宣佈和實施的。斷點不會跳到,並且測試的消息框不會出現。 – matthias 2011-05-24 14:03:27

+0

好吧,它是'(const QPoint&)',所以'connect(TableView,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(on_TableView_ContextMenuRequest()));'會是正確的。謝謝! – matthias 2011-05-25 10:24:01

+0

好吧,讓我們說這是最後正確的,更有意義:'連接(TableView,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(on_TableView_ContextMenuRequest(const QPoint &)));' – matthias 2011-05-25 10:29:53