Frage zu MausTracking & Werte Speichern [gelöst]

Verschiedenes zu Qt
Antworten
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Frage zu MausTracking & Werte Speichern [gelöst]

Beitrag von Qt-nator »

Guten Morgen,

folgende Situation ich hab mit dem Designer eine Oberfläche erstellt mit einem Widget im Designer hab ich MouseTracking auf true gesetzt. Jetzt möchte ich das wenn ich einfach nur die Mausbewege das MousTracking an ist... aber wenn ich die Maustaste drück soll das Tracking aus sein. Bekomm das nicht so wirklich hin. Desweiteren möchte ich sobald die Maustaste gedrückt wird und so lange sie gedrückt bleibt die Positionen der Maus in einem QVector mit Protokoliert werden. Weil ich die einzelnen Punkte dann in meinem Paint Event zeichnen möchte.

Hier mal mein Versuch/Ansatz

Code: Alles auswählen


void
ParameterToolWidget::mousePressEvent(QMouseEvent* event)
{
	QString sMouseInteraction = "Maustaste wurde gedrückt.";

	emit si_mousePosition(sMouseInteraction);

	if (event->button() == Qt::LeftButton) 
	{
    m_Counter	= true;
  }
}

void 
ParameterToolWidget::mouseReleaseEvent(QMouseEvent* event)
{
	QString sMouseInteraction = "Maustaste wurde gedrückt/losgelassen.";

	emit si_mousePosition(sMouseInteraction);

	if (event->button() == Qt::LeftButton && m_Counter) 
	{
       m_Counter =  false;
  }

}

void
ParameterToolWidget::mouseDoubleClickEvent(QMouseEvent* event)
{
	QString sMouseInteraction = "Maustaste wurde doppelt geklickt.";

	emit si_mousePosition(sMouseInteraction);

	QMessageBox::information( this, "Info", Test); 
}

void
ParameterToolWidget::mouseMoveEvent(QMouseEvent* event)
{
	
	QString sMouseInteraction;
   
	sMouseInteraction.sprintf("  Maus Position: X: %d, Y: %d ", event->pos().x(), event->pos().y());	

	emit si_mousePosition(sMouseInteraction);

	if(m_Counter = true)
	{
		QWidget::setMouseTracking(false);
	}
/*
	QPolygonF polygon;

	double dX = event->pos().x();
	double dY = event->pos().y();

	if(m_Counter = true)
	{
		while (m_Counter = true)
		{
			polygon.push_back( QPointF( dX,dY));
		}
	}
*/
}

Wäre für Hilfestellung sehr dankbar.

Gruß

Qt-nator
Zuletzt geändert von Qt-nator am 13. März 2008 11:48, insgesamt 1-mal geändert.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Frage zu MausTracking & Werte Speichern

Beitrag von macman »

Qt-nator hat geschrieben:

Code: Alles auswählen

	if(m_Counter = true)
	{
		QWidget::setMouseTracking(false);
	}
Tracking ausschalten, ok, und wo schaltest Du es wieder an?
Qt-nator hat geschrieben:

Code: Alles auswählen

	if(m_Counter = true)
	{
		while (m_Counter = true)
		{
			polygon.push_back( QPointF( dX,dY));
		}
	}
Du solltest mal die Benamung deiner Variablen überdenken. In m_Counter würde ich eine Zahl erwarten und keinen Boolean. Wenn es wenigstens m_bCounter heißen würde, dann ginge es ja noch.
Aber zum Code. Wenn Counter = true, dann bearbeitest Du die while-Schleife solange m_Counter = true. Und der wird nie false, da Du nicht aus der Schleife kommst, weil die Eventloop nicht dran kommt.

Klarer Fall von nicht debuggt, sonst wäre das sofort aufgefallen. Warum überhaupt eine while-Schleife an der Stelle? Ergibt doch gar keinen Sinn.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

So das mit den werten lesen hab ich jetzt gelöst. Wäre nur noch eine Frage:

Kann ich einem QPolygonF sagen oder Verbieten sich selber abzuschließen?? Also das sich der Letzte Punkt nicht mit dem ersten verbindet???

Ja aber das Problem mit dem MouseTracking hab ich immernoch.

Also Tracking ist im Designer an. und soll aus wenn ich MausTaste drücke aber wieder an wenn ich Taste Loslasse.

also m_bCounter(umbenant) wäre von anfang an False. Wenn ich drücke wird er True und macht Tracking aus wenn ich loslasse wird er wieder False und Tracking geht wieder an?

mein Problem ist nur das das irgendwie nicht hinhaut oder hab ich einen denkfehler drin???

PS: Die while-Schleife ist nicht mehr.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Qt-nator hat geschrieben:Kann ich einem QPolygonF sagen oder Verbieten sich selber abzuschließen?? Also das sich der Letzte Punkt nicht mit dem ersten verbindet???
QPolygon ist nur ein Vektor mit Werten, da ist von sich aus nichts geschlossen. Wenn Du von drawPolygon sprichst, Polygone sind immer geschlossen. Willst Du was Offenes, nimm drawPolyline. Sowas sollte man aber selbst in der Doku finden.
Qt-nator hat geschrieben:wenn ich loslasse wird er wieder False und Tracking geht wieder an?
Von alleine? Wohl kaum. Wenn Du es im releaseEvent nicht wieder anschaltest, dann bleibt es auch aus.
Qt-nator hat geschrieben:mein Problem ist nur das das irgendwie nicht hinhaut oder hab ich einen denkfehler drin???
Hoffentlich nicht so viele Schreibfehler wie hier :-)
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Frage zu MausTracking & Werte Speichern

Beitrag von neuschi »

Qt-nator hat geschrieben:

Code: Alles auswählen

if(m_Counter = true)
	{
Hmm, sollte hier nicht ein == stehen? Für solche Fälle hat es sich bewährt die Konstante im Vergleich immer nach vorne zu stellen, also

Code: Alles auswählen

	if( true == m_Counter )
Falls du dann ein Gleichheitszeichen "vergisst" meckert bereits der Compiler.

Nur so als Tipp...

\Ralf
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

vielen vielen dank für diesen "Tipp" der hat das Problem einwandfrei gelöst.

Und ich entschuldige mich für meine schlechte Rechtschreibung.
Antworten