【问题标题】:QTableWidget - context menu only for specific cells/columnsQTableWidget - 仅适用于特定单元格/列的上下文菜单
【发布时间】:2017-07-26 22:43:17
【问题描述】:

我正在使用 QTableWidget 来显示数据。我知道我可以使用 addAction 方法来添加上下文菜单。如何将上下文菜单限制为仅特定的单元格或列? addAction 存在于 QActionGroup QGraphicsWidget QMenu QMenuBar QToolBar QWidget。我应该以某种方式过滤 oder 禁用/启用信号/插槽吗?处理右键单击事件?

一个类似的问题是如何为不同的行获取不同的上下文菜单?

谢谢你,干杯, 马蒂亚斯

【问题讨论】:

  • 强烈建议您对表使用MVC方法。它还允许您优雅地自定义上下文菜单。

标签: c++ qt4 contextmenu qtablewidget


【解决方案1】:

另一种创建自定义上下文菜单的方法是为QWidget::customContextMenuRequested() 信号实现一个​​槽。在那里您可以查询该位置下的单元格(QTableWidget::itemAt() - 注意全局->小部件映射!),然后使用QMenuQAction 构建自定义菜单。

另外,我会事先构建菜单,而不是只在插槽中执行 exec()。

请记住,您必须将小部件的QWidget::ContextMenuPolicy 属性更改为Qt::CustomContextMenu

【讨论】:

  • 感谢您的回答。听起来不错。不幸的是,我无法将其用于工作。添加了TableView->setContextMenuPolicy(Qt::CustomContextMenu);connect( TableView, SIGNAL( customContextMenuRequested() ), this, SLOT( on_TableView_ContextMenuRequest() ) );;当然还有声明和实现的插槽。不跳转断点,不出现测试消息框。
  • 好的,它是(const QPoint &),所以connect( TableView, SIGNAL( customContextMenuRequested(const QPoint &) ), this, SLOT( on_TableView_ContextMenuRequest() ) ); 是对的。谢谢!
  • 好吧,让我们说这终于正确并且更有意义:connect( TableView, SIGNAL( customContextMenuRequested(const QPoint &) ), this, SLOT( on_TableView_ContextMenuRequest(const QPoint &) ) );
猜你喜欢
  • 2019-07-06
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2012-04-19
相关资源
最近更新 更多