Frage

Ich habe eine QTreeView Klasse mit einem Kontextmenü installiert wie folgt:

m_ui.tree->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_ui.tree, SIGNAL(customContextMenuRequested(const QPoint&)),
        this, SLOT(ShowTreeContextMenu(const QPoint&)));
...
void ShowTreeContextMenu(const QPoint& point)
{
   m_treeContextMenu->exec(m_ui.tree->viewport()->mapToGlobal(point));
}

Allerdings, wenn Sie das Kontextmenü des QTreeView angezeigt wird nicht mehr auf Mausklicks reagieren. Ein Klick auf ein Element in der QTreeView, während das Kontextmenü angezeigt wird, wird das Kontextmenü entfernen, aber das geklickt Element nicht aus.

Dies ist besonders verwirrend, wenn direkt auf ein neues Element zu klicken, da das Kontextmenü über das neue Element erscheint, sondern als Gegenstand wurde der Inhalt des Kontextmenü nicht ausgewählt werden, die sich auf die zuvor ausgewählte Element.

War es hilfreich?

Lösung

Sie sagen nicht, welche Version von Qt Sie verwenden, aber wir fanden das gleiche Problem in Qt4.4.0, es in 4.3 gearbeitet. Wir berichten dies Trolltech als Bug 225615

Dies ist nach wie vor als ausstehend markiert, so in der Zwischenzeit würde ich Shy Vorschlag des Abfangens die rechte Maustaste und macht die Auswahl selbst folgen.

Andere Tipps

Eine mögliche Lösung, die ich nicht überprüft habe, wäre das Click-Ereignis des rechten Mausklick zu erfassen, manuell die Auswahl in der Baumansicht machen und dann das übergeordnete Click-Ereignis aufgerufen wird, was wiederum das Kontextmenü aktivieren.

die QTreeView Unterklasse und fügen Sie die geschützte Methode void contextMenuEvent (QContextMenuEvent * event); Bei dieser Methode führen Sie eine QMenu:

class TreeView : public QTreeView{
  Q_OBJECT
public:
  TreeView(QWidget *parent);
  ~TreeView();
protected:
  void contextMenuEvent(QContextMenuEvent *event);
};

void TreeView::contextMenuEvent(QContextMenuEvent *event){
  QMenu menu(this);
  menu.addAction(action1);
  menu.addAction(action2);
  //...
  menu.addAction(actionN);
  menu.exec(event->globalPos());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top