Seite 1 von 1

[gelöst] Rechtaustaste ContextMenu irgenwo im Bildschirm

Verfasst: 31. März 2015 15:55
von huckleberry
Hallo,

ich habe einige Untermenüs für die Rechtemaustaste in meinem Widget implementiert. Klappt auch ganz toll:

Code: Alles auswählen

  myWidget->setContextMenuPolicy(Qt::CustomContextMenu);
  connect(myWidget, SIGNAL(customContextMenuRequested(const QPoint&)),
          this, SLOT(popupContextMenu(const QPoint&)));
		  
void
WidgetWindow::popupContextMenu(const QPoint& pos)
{
  QPoint mousePos = myWidget->mapToParent(pos);

  QMenu subMenu;
  subMenu.addAction("set Value1");
  subMenu.addAction("set Value2");

  QAction* rightClickItem = subMenu.exec(mousePos);

  if( rightClickItem && rightClickItem->text().contains("Value1") )
  {
	//..
  }
}
Mein Widget ist kleiner als meine eigentliche Desktopgröße (3 Bildschirme). Wenn ich rechte Maustaste Drücke taucht das Submenü mit "set Value1" und "set Value2" etc. auf dem Bildschirm mit dem Startsymbol auf und nicht in meinem Widget und schon gar nicht da wo meine Maus zum Zeitpunkt des Klicks war.

Warum?

Ich danke schonmal
VG Huck

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Verfasst: 31. März 2015 17:52
von Christian81
Da der parent von myWidget sicher nicht das Desktop-Widget ist würde ich sagen dass mapToParent() nicht die richtigen Koordinaten erzeugt die du zum Darstellen des QMenu auf dem Desktop nötig sind. Ich würde es mal mit mapToGlobal() probieren.

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Verfasst: 1. April 2015 08:56
von huckleberry
Christian81 hat geschrieben:mapToGlobal()
Das hatte ich am Anfang auch so, und das ContextMenu tauchte gleich beim Mauszeiger auf. Jedoch muss ich mit den Mauskoordinaten (aus dem Parent) weiterechnen und diese sind logischerweise anders als beim mapToGlobal().

1. Unabhängig davon ob ich die Koordinaten vom Screen oder vom (Parent-)Widget bekomme, sollte das SubMenu nicht immer am Mauszeiger auftauchen?

2. Ich würde dann das mapToGlobal() benutzen, wenn es eine Möglichkeit gebe, dessen Koordinaten in die Koordinaten des Parent umzurechnen?

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Verfasst: 1. April 2015 17:34
von Christian81
1. was hindert Dich daran mapToGlobal() und mapToParent() aufzurufen
2. QMenu möchte nunmal Desktop-Koordinaten -> http://doc.qt.io/qt-4.8/qmenu.html#exec-2

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Verfasst: 22. April 2015 12:45
von huckleberry
Gefixt mit:

Code: Alles auswählen

  QPoint globalPos = myWidget->mapTo(myWidget, pos);
  QAction* selectedItem = unterMenu.exec(QCursor::pos());
Nun funzt es einwandfrei.