Seite 1 von 1

[gelöst] treeview ModelIndex & MousePosition

Verfasst: 13. Juni 2010 14:44
von 24dan
Hi,
in meinem QTreeView möchte ich gerne ein Kontextmenü integrieren.

Jetzt habe ich eine Problem den richtigen ModelIndex zu bekommen.
Für das Kontextmenu verwende ich das schon vorhandene

Code: Alles auswählen

contextMenuEvent()
, damit wird mir das Menü richtig Positioniert.
Jedoch bekomme ich einen "falschen" Index für meine Angeklickte Zelle
Die lese ich bisher mit....

Code: Alles auswählen

ui->treeView->indexAt(e->pos())
Das SIGNAL

Code: Alles auswählen

connect(ui->treeView, SIGNAL(clicked(QModelIndex))
liefert mir den richtigen Index jedoch habe ich keine Idee wie ich jetzt dieses SIGNAL und das contextMenuEvent() verwenden kann?

Verfasst: 13. Juni 2010 14:48
von franzf
QWidget::mapFromParent() hilft dir.

Verfasst: 13. Juni 2010 15:17
von 24dan
franzf hat geschrieben:QWidget::mapFromParent() hilft dir.
Bin ich richtig verstanden worden???

Also ich habe mein Problem jetzt so gelöst....

1. contextMenuEvent(QContextMenuEvent * e) implementieren
2. Kontextmenu, hier ein QtPieMenu erstellen mit Abhängigkeit zum Inhalt dazu Index holen: ui->treeView->currentIndex()
3. Kontextmenu anzeigen mit p->popup(e->globalPos());

Fertig

Verfasst: 13. Juni 2010 16:26
von upsala
Wer kann das schon sagen, schließlich hast du deine Anfrage nachbearbeitet.

Verfasst: 13. Juni 2010 17:47
von 24dan
upsala hat geschrieben:Wer kann das schon sagen, schließlich hast du deine Anfrage nachbearbeitet.
Ach mann spielverderber.. ich hab doch nur den letzten Satz noch hinzugefügt....
Ja is doof...

Verfasst: 13. Juni 2010 18:53
von franzf
24dan hat geschrieben:
franzf hat geschrieben:QWidget::mapFromParent() hilft dir.
Bin ich richtig verstanden worden???
Ich bin mir ziemlich sicher dass ich dich verstanden habe. Du hast ein Widget, aufgesetzt mit einem ui. In deinem Widget fängst du das mousePressEvent() ab. Dein treeView befindet sich irgendwo innerhalb des Widgets, weshalb QPoint(0,0) im Tree irgendwo mit x>0, y>0 im Widget zu finden ist, was wiedrum dazu führt, dass wenn du e->pos() direkt an dein treeView übergibst, das um jenen Offset daneben geht.
Lösung: QWidget::mapFromParent().