0

QGridLayout に QFrames のグリッドと、マウスの右クリックが発生するセルを対象とするいくつかのアクションを含むポップアップ メニューがあります。ContextMenuEvent の実装で、一般的なイベント ->pos() を使用して QPoint をクリックしますが、その時点で正しいセル オブジェクトにアクセスするにはどうすればよいですか? または、この目的のためのより良い代替ソリューションパスはありますか?

void X::contextMenuEvent(QContextMenuEvent* event)
{   // QPoint target = event->pos();
    // TODO: m_gridLayout-> ...
    // myDerivedCell->setSomething();
}
4

1 に答える 1

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());
    ...
}
于 2013-05-21T13:31:47.573 に答える