Seite 1 von 1

Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 11:47
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?

Re: Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 12:37
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.

Re: Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 12:38
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.

Re: Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 12:41
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.

Re: Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 12:45
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.

Re: Probleme mit QMouseEvent::pos()

Verfasst: 27. Februar 2006 13:35
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.

Verfasst: 27. Februar 2006 13:46
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.

Verfasst: 27. Februar 2006 14:11
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.