Mausklick simulieren

Alles rund um die Programmierung mit Qt
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Mausklick simulieren

Beitrag von etjazzman »

Hallo zusammen,

gibt es eine Möglichkeit einen Mausklick zu simulieren?
Das heißt ich drück einen Button, die Maus wandert an eine Position und löst einen Links-, oder Rechtsklick aus.
Die Positionierung geht mit:

Code: Alles auswählen

QCursor::setPos(int x, int y)
Aber wie kann man mit Qt einen Mausklick erzeugen?
Danke für jede Info!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Erzeug dir ein QMouseEvent und sende es an das betreffende Widget.
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

Hab jetzt ein Event erstellt:

Code: Alles auswählen

QMouseEvent *clickevent = new QMouseEvent(QEvent::MouseButtonPress, point, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(this, clickevent);
Wie sende ich jetzt den Event an mein Mainwindow?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

 
void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

Irgendwie passiert da nichts.

Code: Alles auswählen

#include "mainwindow.h"
#include <QtGui/QMouseEvent>

MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags)
{
	ui.setupUi(this);
	connect(ui.pushButton, SIGNAL(released()), this, SLOT(test()));
	
}

void MainWindow::test(){

	point.setX(1000);
	point.setY(400);
	clickevent = new QMouseEvent(QEvent::MouseButtonPress, point, Qt::RightButton, Qt::RightButton, Qt::NoModifier);
	QCoreApplication::postEvent(this, clickevent);
}

MainWindow::~MainWindow() 
{}
Mache ich irgendwas falsch?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Was soll denn passieren?
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

Eigentlich sollte der Mauszeiger, wenn ich den Button drücke, zu den Koordinaten 1000 und 400 springen und dort ein Rechtsklick ausführen.
Oder macht man das anders?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Macht das event etwa gar nichts, oder nur einen Teil?

Mal davon abgesehen, du erwartest einen click, sendest aber nur ein press.
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

So wie es aussieht macht es gar nichts.
Was ist der Unterschied zwischen "press" und "click"?
Hat da jemand ein gutes Beispiel wo es funktioniert?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Sorry aber was soll das ganze - was ist an der Position was Du nicht über direkten Weg oder per Signal/Slot ereichbar ist??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

Christian81 hat geschrieben:Sorry aber was soll das ganze - was ist an der Position was Du nicht über direkten Weg oder per Signal/Slot ereichbar ist??
Schwer konstruktive Vorschläge zu machen?
Ich bin nicht der Qt-Experte deswegen suche ich Rat.
Ich hoffe hier sind nicht alle so...?

Hat jemand noch Vorschläge wie man einen Mausklick simulieren?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

etjazzman hat geschrieben: Hat jemand noch Vorschläge wie man einen Mausklick simulieren?
Der Vorschlag war schon da. Wenn es nicht geht - minimales kompilierbares Beispiel!
Aber warum man einen Mausklick simulieren will ist eigentlich die spannendere Frage da es im Grunde unnötig ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
etjazzman
Beiträge: 10
Registriert: 18. April 2011 17:55

Beitrag von etjazzman »

Ich hab ein Touch-Gerät. Dieses sendet mir Daten, die ich auswerte. Mit QCursor ist es mir schon gelungen die Daten als Koordinaten zu interpretieren und an der richtigen Stelle den Mauszeiger zu setzen.
Jetzt ist das Problem, dass ich mit dem Touch-Gerät auch ein Klick erzeugen möchte. Da wollte ich wissen ob das in Qt möglich ist.
Deswegen würde ich gerne wissen, wenn ein Touch erkannt wird soll eine Funktion aufgerufen werden, die einen Mausklick erzeugt.
Ich hoffe es ist jetzt etwas klarer geworden.
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag von jerry42 »

vielleicht hilft Dir das:
http://doc.trolltech.com/4.7/qapplication.html#widgetAt

das Widget kannst du dann casten und je nachdem was für ein widget es ist, den entsprechenden Slot aufrufen, z.B. clicked() für einen Button.

edit: aber vielleicht hab ich es auch missverstanden, und du willst durch den Mausklick gar kein spezielles Widget ansprechen, sondern an der ganz spezifischen Position einen Rechtsklick ausführen?! In dem Fall bringt Dir die Methode vermutlich nichts.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

etjazzman hat geschrieben:Ich hab ein Touch-Gerät. Dieses sendet mir Daten, die ich auswerte. Mit QCursor ist es mir schon gelungen die Daten als Koordinaten zu interpretieren und an der richtigen Stelle den Mauszeiger zu setzen.
Jetzt ist das Problem, dass ich mit dem Touch-Gerät auch ein Klick erzeugen möchte. Da wollte ich wissen ob das in Qt möglich ist.
Deswegen würde ich gerne wissen, wenn ein Touch erkannt wird soll eine Funktion aufgerufen werden, die einen Mausklick erzeugt.
Ich hoffe es ist jetzt etwas klarer geworden.
Sollte das nicht der Treiber des Geräts erledigen?
Antworten