2013-05-21 25 views
0

我在QGridLayout中有QFrame的網格,並且有一些彈出式菜單,其中有一些動作,它們是鼠標右鍵點擊的單元格。在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()); 
    ... 
}