2013-05-21 4 views
0

QGridLayout에 QFrames 그리드가 있고 마우스 오른쪽 버튼 클릭이 발생하는 셀을 대상으로하는 몇 가지 작업이있는 팝업 메뉴가 있습니다. ContextMenuEvent의 구현에서 일반적인 이벤트 -> pos()를 사용하여 QPoint를 클릭하지만 어떻게 그 점에 의해 올바른 셀 객체에 액세스 할 수 있습니까? 아니면이 목적을위한 더 나은 대체 솔루션 경로가 있습니까?QPoint를 클릭하여 QGridLayout 항목을 얻는 방법?

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

답변

0

여기에는 여러 가지 해결 방법이 있습니다. 가장 간단한 방법은 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()); 
    ... 
} 
관련 문제