Mouse Position + statusbar + Anzeige[gelöst]

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

Mouse Position + statusbar + Anzeige[gelöst]

Beitrag von Qt-nator »

Hi,

Ich habe in meiner Widget Klasse folgendes eingebot:

Code: Alles auswählen

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

was mir ja die Mauszeiger Position ausgibt wenn ich die Maus bewege. Das ist in meiner ParametertoolWidget Klasse implementiert. Ich möchte den Inhalt der Variable sMousInteraction in der Statusbar meines MainWindows anzeigen lassen welches seine eigene Klasse besitzt.

Die Frage ist jetzt: Gibt es eine Möglichkeit den Inhalt des QString sMouseInteraction in die Statusbar von der MainWindow Klasse zu bekommen. Oder muss ich den Inhalt an die MainWindow Klasse übergeben und den Inhalt dort dann in die Statusbar schreiben???

Ich komme jedenfalls nicht wirklich klar damit und wäre für Hilfe sehr dankbar.

Gruß

Qt-nator
Zuletzt geändert von Qt-nator am 12. März 2008 13:04, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wo ist das Problem? Pointer der Statusbar der Widget-Klasse zugänglich machen und Text setzen. Wie Du das machst ist Dir überlassen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Und wie macht man das? Ich Arbeite ja mit dem Designer wie und hab die Statusbar nicht selbst erstellt... wie kann ich das dann umsetzen?
VuuRWerK
Beiträge: 82
Registriert: 11. Juni 2007 20:46
Wohnort: Dresden

Beitrag von VuuRWerK »

QMainWindow::statusBar

Gut Schuß
VuuRWerK ;)
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel.
Oft ist die Ursache des schwarzsehens lediglich ein verrutschen des Bretts vorm Kopf =)
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Re: Mouse Position + statusbar + Anzeige

Beitrag von neuschi »

Qt-nator hat geschrieben:
Und wie macht man das? Ich Arbeite ja mit dem Designer wie und hab die Statusbar nicht selbst erstellt... wie kann ich das dann umsetzen?
z.b.

Code: Alles auswählen

class ParameterToolWidget....
{
Q_OBJECT:

signals:
      si_mousePosition(const QString&);
};
und dann in deiner Funktion:

Code: Alles auswählen

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

       emit si_mousePosition( sMouseInteraction );
}
Dann musst du in deinem Hauptprogramm noch das Signal verbinden:

Code: Alles auswählen


ParameterToolWidget *pw = new ParameterToolWidget(...);
connect (pw, SIGNAL(si_mousePosition(const QString&)), mainWindow->statusBar(), SLOT( showMessage(const QString&)));
}
ungetestet, aber so ähnlich sollte das gehen.
\Ralf
Qt-nator
Beiträge: 153
Registriert: 18. Dezember 2007 10:31

Beitrag von Qt-nator »

Erstmal vielen dank

Code: Alles auswählen


connect (m_pParameterToolWidget, SIGNAL(si_mousePosition(const QString&)), statusBar(), SLOT( showMessage(const QString&))); 

So gehts dann!

Edit:
Was mich aber dann noch Interessieren würde ist wie ich bei Bewegung der Mouse die Position des Zeigers bekomme ohne das ich vorher Klicken muss?

Edit2:
Das war dann doch überhaupt kein Problem... nur kann mir noch jemand schnell sagen wie ich die Anzeige in der Statusbar zeitlich einschränke???
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

Qt-nator hat geschrieben:Erstmal vielen dank

Edit1:
Was mich aber dann noch Interessieren würde ist wie ich bei Bewegung der Mouse die Position des Zeigers bekomme ohne das ich vorher Klicken muss?

Edit2:
Das war dann doch überhaupt kein Problem... nur kann mir noch jemand schnell sagen wie ich die Anzeige in der Statusbar zeitlich einschränke???
Zu 1: setMouseTracking

Zu 2: Ich nehme an, das ist zu langsam, wenn jede Mausbewegung angezeigt wird? Dann probiere mal folgendes im Eventhandler:

Code: Alles auswählen


static QTime lastEventTime=QTime();
	static int t = 0;
	static QPoint lastPoint = QPoint();
	
	QPoint curPnt = event->pos();
	
	t += lastEventTime.restart();
	
	if ( t < 100)
	{
		int len = (lastPoint-curPnt).manhattanLength();
		if (len <10)
		{
			// zu schnell, zu kurz
		  	lastPoint = curPnt;
		   	return;
		}
	}
	t = 0;
	lastPoint = curPnt;
	emit si_mousePosChanged( ..... );
An folgenden Werten kannst du rumspielen:
100 = 100ms zwischen Events
10 = 10 Pixel zwischen Events

Wieder ungetestet....

\Ralf
Antworten