[gelöst] Rechtaustaste ContextMenu irgenwo im Bildschirm

Verschiedenes zu Qt
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

[gelöst] Rechtaustaste ContextMenu irgenwo im Bildschirm

Beitrag 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
Zuletzt geändert von huckleberry am 5. August 2015 14:56, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Re: Rechtaustaste ContextMenu taucht irgenwo im Bildschirm a

Beitrag von huckleberry »

Gefixt mit:

Code: Alles auswählen

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