void InventoryTreeView::contextMenuEvent(QContextMenuEvent *event) { // Do mousePressEvent so that the right item gets selected before we show the menu // (right-click doesn't do this automatically). QMouseEvent mouseEvent(QEvent::MouseButtonPress, event->pos(), event->globalPos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); mousePressEvent(&mouseEvent); QModelIndex index = selectionModel()->currentIndex(); if (!index.isValid()) return; QMenu *menu = new QMenu(this); QListIterator<QAction *> it(actions()); while(it.hasNext()) { QAction *action = it.next(); if (action->isEnabled()) { // This is kind of hack, but we might have case that base language is not english. InventoryAction* act = qobject_cast<InventoryAction* >(action); QString text = QApplication::translate("Inventory::InventoryWindow", act->GetText().toStdString().c_str()); action->setText(text); menu->addAction(action); } } if (menu->actions().size() > 1) // separator "action" is always enabled, hence the 1 menu->popup(event->globalPos()); }