Seite 1 von 1

[Qt] MouseEvents&Modifier

Verfasst: 01.01.2011, 19:35
von Jonathan
Ich hab ungefähr folgendes:

Code: Alles auswählen

void RenderWindow::mouseMoveEvent(QMouseEvent* event)
{
	static QPoint LastPos;
	Vector2f MouseDiff=Vector2f((event->pos()-LastPos).x(), (event->pos()-LastPos).y());

	event->modifiers();

	//
	Mrl::Matrix *Mat=NULL;
	if(event->modifiers() && Qt::ShiftModifier)
		Mat=&m_CameraRotation;
	else
		Mat=&m_ModelRotation;

	if(event->buttons() && Qt::LeftButton)
	{
		Mat->RotateMatrix(MouseDiff.x/100.0f, MouseDiff.y/100.0f, 0.f);
	}
	if(event->buttons() && Qt::RightButton)
	{
		Mat->RotateMatrix(0.0f, 0.0f, -MouseDiff.x/100.0f);
	}

	LastPos=event->pos();
	updateGL();
}
Laut Doku sind die buttons Or verknüpfte Flags. Dann sollte das mit dem && doch funktionieren, richtig? Tut es aber leider nicht (es wird immer beides ausgelöst). Wenn ich stattdessen == benutze, funktioniert das mit den buttons (ich kann nur natürlich nicht mehr 2 auf einmal drücken), aber das mit den modifiers() geht einfach nie.

Re: [Qt] MouseEvents&Modifier

Verfasst: 01.01.2011, 20:05
von B.G.Michi
musst du dafür nicht ein bitweises UND verwenden und das wäre dann ein einfaches "&"?

Re: [Qt] MouseEvents&Modifier

Verfasst: 01.01.2011, 20:19
von Aramis
&& promotet bzw. konvertiert zuerst beide Operanden auf bool. D.h.

Code: Alles auswählen

event.buttons() && Qt::LeftButton
ist aequivalent zu

Code: Alles auswählen

event.buttons()!=0 && Qt::LeftButton!=0
… was immer wahr ergeben duerfte. Wie von B.G.Michi bereits angemerkt, ist ein bitwise AND (&) der richtige Weg.

Re: [Qt] MouseEvents&Modifier

Verfasst: 01.01.2011, 20:43
von Jonathan
Argh, kaum benutzt man sowas n Weilchen nicht, weiß man nicht mehr, wie es geht; dankeschön :oops: