Je voudrais faire apparaître un menu contextuel lorsque l'utilisateur clique sur un objet dans QTreeWidgetItem. Je pense à attraper le signal contextMenuRequested de QWidget, puis en récupérant l'index de la vue en utilisant itemAt. Mais cela ne semble pas très joli. Existe-t-il un moyen plus simple de pouvoir appeler un menu sur un élément dans une vue?Appel du menu contextuel dans QTreeWidget
4
A
Répondre
4
Écrivez votre propre coutume ItemDelegate et gérer l'événement, cliquez dans QAbstractItemDelegate::editorEvent
. Vous pouvez récupérer les données dans la cellule à partir de QModelIndex. En C++, il ressemblerait à ceci:
class ItemDelegate: public QItemDelegate
{
public:
ItemDelegate(ContextMenuHandler *const contextMenu, QObject *const parent)
: QItemDelegate(parent)
, m_contexMenu(contextMenu)
{
}
bool editorEvent(
QEvent * event,
QAbstractItemModel * model,
const QStyleOptionViewItem & option,
const QModelIndex & index)
{
if((event->type()==QEvent::MouseButtonPress) && index.isValid())
{
QMouseEvent *const mouseEvent = qobject_cast<QMouseEvent>(event);
if(mouseEvent && (mouseEvent->button()==Qt::RightButton))
{
return m_contexMenu->showContextMenu(mouseEvent->pos(), index);
}
}
}
ContextMenuHandler *const m_contextMenu;
};
treeWidget->setItemDelegate(new ItemDelegate(contextMenuHandler,treeWidget));
0
J'utilise quelque chose comme ceci:
self.widget_layers.setContextMenuPolicy(Qt.ActionsContextMenu)
removeLayerAction = QAction("Remove selected layer", self)
self.connect(removeLayerAction, SIGNAL('triggered()'), self.layers_widget_controller.remove_selected_layer)
et vérifiez quel élément a déclenché le signal par:
selected_item = self.main_window.widget_layers.selectedItems()[0]
0
Ce que je l'ai fait avec le nouveau style signal/fente:
self.treeMenu = QMenu()
self.treeAction = QAction('print', self.treeMenu)
self.treeAction.triggered.connect(self.printTreeItem)
self.treeWidget.addAction(self.treeAction)
@pyqtSlot()
def printTreeItem(self):
print self.treeWidget.currentItem().text(0)
Cela ouvrira un menu lorsque vous faites un clic droit dans le votre treeWidget. Et si vous cliquez sur 'imprimer', dans votre console, il imprimera l'élément qui a le focus actuel, c'est celui sur lequel vous avez cliqué à droite.
Note: l'article actuel n'est pas nécessaire l'article sélectionné, l'article sélectionné est celui sur lequel vous avez cliqué le plus récemment.
Questions connexes
- 1. GTK: éléments du menu contextuel de positionnement w.r.t menu contextuel
- 2. Options du menu contextuel dynamique
- 3. Éléments du menu contextuel dynamique
- 4. menu contextuel dans asp.net
- 5. Menu contextuel
- 6. Option de menu contextuel du shell Windows
- 7. Raccourci du menu contextuel Visual Studio
- 8. QT: Référence Menu contextuel (QMenu) du QTableWidget
- 9. Aide contextuelle du menu contextuel de jQuery!
- 10. Menu contextuel du projet Explorateur de solutions
- 11. Désactiver le menu contextuel du système DataGridView
- 12. Vérifications de l'élément radio du menu contextuel
- 13. asp.net menu contextuel
- 14. Personnalisé "menu contextuel" dans flex
- 15. javascript menu contextuel dans iframe
- 16. Bits contextuels du menu contextuel Internet Explorer
- 17. Ajouter au menu contextuel du navigateur?
- 18. Afficher le menu contextuel du code derrière
- 19. Comment ajouter un menu contextuel à NSOutlineView (ie menu contextuel)
- 20. ToolStripButton avec menu contextuel?
- 21. menu contextuel parent?
- 22. menu contextuel - javascript
- 23. Modèle de conception pour contextuel "contextuel" Menu
- 24. Acrobat Menu contextuel
- 25. Menu contextuel Éléments manquants
- 26. Étrange menu contextuel numéro
- 27. explorer contextuel menu contextuel avec python?
- 28. Menu contextuel MFC "collant"
- 29. Menu contextuel vs Popup
- 30. Menu contextuel flash
Merci, cela semble assez joli :-) Événement géré directement dans l'élément. – gruszczy
qu'est ce que ContextMenuHandler? pourquoi est-ce nécessaire? – Prady