如何通过单击 QPoint 获取 QGridLayout 项目?
Posted
技术标签:
【中文标题】如何通过单击 QPoint 获取 QGridLayout 项目?【英文标题】:How to get QGridLayout item by clicked QPoint? 【发布时间】:2013-05-21 13:12:12 【问题描述】:我在 QGridLayout 中有一个 QFrame 网格和一个带有一些操作的弹出菜单,这些操作针对发生鼠标右键单击的单元格。在 ContextMenuEvent 的实现中,我使用 common event->pos() 单击了 QPoint,但是到那时我如何访问正确的单元格对象?或者是否有更好的替代解决方案用于此目的?
void X::contextMenuEvent(QContextMenuEvent* event)
// QPoint target = event->pos();
// TODO: m_gridLayout-> ...
// myDerivedCell->setSomething();
【问题讨论】:
【参考方案1】:这里有很多解决方案。最简单的是通过您的小部件,调用bool QWidget::underMouse () const
。我最喜欢的是这个:
frame_i->setContextMenuPolicy(Qt::CustomContextMenu);
connect(frame_i, SIGNAL(customContextMenuRequested(QPoint))
, SLOT(onContextMenu(QPoint)));
...
void X::onContextMenu(const QPoint &pos)
QFrame *w = qobject_cast < QFrame * >(sender());
...
【讨论】:
以上是关于如何通过单击 QPoint 获取 QGridLayout 项目?的主要内容,如果未能解决你的问题,请参考以下文章