Qt QTableView上下文菜单和右键选择

Qt QTableView context menu and right selection

您好,我正在使用带有自定义项目委托的 QTableView

我在委托中使用 editorEvent 来显示右键单击的每个项目都不同的上下文菜单。 使用 QMenu::exec() 显示菜单。

问题是,当我右键单击一个未选中的单元格时,会显示菜单(阻塞),只有在菜单消失后,该单元格才会被选中。 这是因为鼠标点击首先被委托捕获,然后传播到视图以进行选择。

我可以尝试哪个alternative/workaround?

编辑

我确实抓到了 QEvent::MouseButtonPress。使用 MouseButtonRelease 而不是先选择单元格,然后出现上下文,但是如果您在按下按钮的同时移动鼠标,则选择保留在您按下按钮的位置,而上下文菜单出现在释放按钮的单元格上.

我认为解决此问题的唯一方法是按照下面的建议将此代码移出委托。

如果您只需要在用户单击鼠标右键时显示​​菜单,则无需创建自定义项委托。

您可以在 event->button() == Qt::RightButton 时处理 mouseReleaseEvent 并使用 QTableView::selectionModel() 获取所选项目。

希望对您有所帮助。

正如 cdonts 所建议的那样,使用委托来显示上下文菜单不仅不需要,而且性能也不佳。

我用过的是QWidget::setContextMenuPolicy(Qt::CustomContextMenu)和信号QWidget::customContextMenuRequested(QPoint)。这允许我在创建上下文菜单之前检查实际选择,询问查看其 SelectionModel(这可以在模型中完成以轻松自定义菜单并相应地编辑数据)。

记得使用 QTableView->viewport()->maptoglobalpos(point) 获取菜单应该出现的全局坐标。

按照@alez 的建议工作。为了获得我使用的坐标 QTableView->mapToGlobal(pos)