Seite 1 von 1

Frage zu MausTracking & Werte Speichern [gelöst]

Verfasst: 13. März 2008 09:26
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

Re: Frage zu MausTracking & Werte Speichern

Verfasst: 13. März 2008 10:17
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.

Verfasst: 13. März 2008 10:48
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.

Verfasst: 13. März 2008 11:13
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 :-)

Re: Frage zu MausTracking & Werte Speichern

Verfasst: 13. März 2008 11:40
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

Verfasst: 13. März 2008 11:48
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.