Probleme mit QMouseEvent::pos()

Alles rund um die Programmierung mit Qt
Antworten
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Probleme mit QMouseEvent::pos()

Beitrag von Delryn »

Heute mal in Englisch, ihr dürft aber gerne in Deutsch antworten ;) Habe gerade nur keine Zeit, meine Frage wieder zu übersetzen :oops:


Hi!

I have a QFrame in my QMainWidget, which contains also a QMenuBar. If the user makes a doubleclick, I want to check if this doubleclick was placed inside the frame.
Here is my code, which works nearly fine:

Bild


Explanation:
The geometry() of the QFrame begins after the QMenuBar.
A MouseClick is count before the QMenuBar, here is a picture:

Bild

So when I click like in the picture above, qt "thinks" I clicked in the framearea.
My solution would be to modify the y from the MouseEvent like in my code:

Code: Alles auswählen

pMouseEvent->setY(pMouseEvent->y()+=m_ui.menubar->rect().height());
But there is no method like setY()....

what can I do?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Probleme mit QMouseEvent::pos()

Beitrag von macman »

Delryn hat geschrieben:Habe gerade nur keine Zeit, meine Frage wieder zu übersetzen :oops:
Solltest Du dir aber nehmen, schließlich hast Du auch Zeit gehabt deinen Sourcecode als Screenshot hier hin zu pappen.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Re: Probleme mit QMouseEvent::pos()

Beitrag von Delryn »

macman hat geschrieben:
Delryn hat geschrieben:Habe gerade nur keine Zeit, meine Frage wieder zu übersetzen :oops:
Solltest Du dir aber nehmen, schließlich hast Du auch Zeit gehabt deinen Sourcecode als Screenshot hier hin zu pappen.
Wo ist das Problem? Ich finde, dass der Quelltext so viel besser lesbar ist.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Probleme mit QMouseEvent::pos()

Beitrag von macman »

Delryn hat geschrieben:Wo ist das Problem? Ich finde, dass der Quelltext so viel besser lesbar ist.
Man kann nichts selektieren, wenn man dir einen Fehler im Sourcetext verbessern will. Abtippen wird es wohl keiner.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Re: Probleme mit QMouseEvent::pos()

Beitrag von Delryn »

macman hat geschrieben:
Delryn hat geschrieben:Wo ist das Problem? Ich finde, dass der Quelltext so viel besser lesbar ist.
Man kann nichts selektieren, wenn man dir einen Fehler im Sourcetext verbessern will. Abtippen wird es wohl keiner.
Das einzige Argument, welches ich zählen lasse, ist das erste, sprich das Gäste nicht mitlesen können.

Der Rest... nun ja.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Probleme mit QMouseEvent::pos()

Beitrag von macman »

Delryn hat geschrieben:Das einzige Argument, welches ich zählen lasse, ist das erste, sprich das Gäste nicht mitlesen können.
Welches falsch war, wie ich inzwischen festgestellt habe.

Aber zu deinem Problem. Warum willst Du das MouseEvent ändern? Wenn etwas ändern, dann doch das QRect, welches Du von geometry() zurück bekommst.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

Das mit dem Rect habe ich nicht verstanden, die rect-Methode welcher Klasse meinst du?

Ich habe mir jetzt etwas zusammengefrickelt, was so auch funktioniert, nur leider nicht schön aussieht:

Code: Alles auswählen

void CMainWindow::mousePressEvent(QMouseEvent *pMouseEvent)
{
	// Small fix
	QPoint clicked(pMouseEvent->pos());
	clicked.setY(clicked.y() - m_ui.menubar->rect().height());

	
	if(pMouseEvent->type() == QEvent::MouseButtonDblClick)
	{
		if(pMouseEvent->button() == Qt::LeftButton)
		{
			// Check wether the click was placed in the frame
			if(m_ui.pFrame->geometry().contains(clicked))
			{
				cout<<"X: "<<clicked.x()<<endl;
				cout<<"Y: "<<clicked.y()<<endl;
			}
		}
	}
}
Da ich den QPoint vom MausEvent wohl nicht ändern darf, lege ich mir extra einen neuen QPoint an und änder dort den Wert und überprüfe dann, ob dieser QPoint in dem Frame liegt.

Geht, ist aber irgendwo Verschwendung.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Delryn hat geschrieben:Das mit dem Rect habe ich nicht verstanden, die rect-Methode welcher Klasse meinst du?
m_ui.pFrame->geometry() gibt ein QRect zurück.

Delryn hat geschrieben:Ich habe mir jetzt etwas zusammengefrickelt, was so auch funktioniert, nur leider nicht schön aussieht:
Entspricht in etwas dem was ich vorgeschlagen habe. Du änderst den Klickpunkt, ich hätte das Rechteck geändert.

Delryn hat geschrieben:Da ich den QPoint vom MausEvent wohl nicht ändern darf
Kannst Du sicher stellen das Du der letzte bist der diesen Event bearbeitet? Nein.
Antworten