如何通过单击 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 项目?的主要内容,如果未能解决你的问题,请参考以下文章

查找 QPolygon 是不是包含 QPoint - 未给出预期结果

Qt 常用类 —— QPoint

在QWebEngineView中获取sslerrors信号

关于QPoint类

如何通过鼠标单击获取像素的 rgb 颜色值

如何通过单击获取项目的 id 值