Seite 1 von 1

Signal für Clicked?

Verfasst: 30. September 2007 21:29
von pospiech
Ich möchte einem Maus Click einen Slot zuweisen. Dabei bin ich auf das simple Problem gestoßen das mir unklar ist wie dieses Signal abgefragt wird und wie ich Signale überhaupt in der Dokumentation finde.

Oder konkret:
Wie lautet die Anweisung, damit innerhalb eines Dialogs bzw eines Widgets die Funktion switchSreen() bei einem Mausklick aufgerufen wird?

Matthias

Verfasst: 30. September 2007 23:28
von QNoob
Moin,

ist doch auf der Trollechseite leicht zu finden. Auf der Seite ist sogar ein Link zu einem Turoial mit jeder menge Beispielcode.
http://doc.trolltech.com/4.3/signalsandslots.html

und das könnte dir auch noch helfen
http://doc.trolltech.com/4.3/qmouseevent.html

Verfasst: 1. Oktober 2007 14:48
von pospiech
QNoob hat geschrieben: ist doch auf der Trollechseite leicht zu finden.
In der Trolltech Dokumentation war für mich noch nie etwas leicht zu finden, denn der Umfang macht das einfach sehr schwer. Wenn man die Dokumentation erstmal gut genug kennt mag das anders sein.
QNoob hat geschrieben: Auf der Seite ist sogar ein Link zu einem Turoial mit jeder menge Beispielcode.
http://doc.trolltech.com/4.3/signalsandslots.html
Das Problem ist nur, dass ich kein Tutorial benötige sondern eine Liste von möglichen Signals suche. Also in der Art: Mausklick löst signal1 aus, tastenklick löst signal2 aus, ...
Wobei mir dabei jetzt der Unterschied zwischen signalen und events nicht ganz klar ist.

Matthias

Verfasst: 1. Oktober 2007 15:24
von QNoob
Der zweite Link, den ich gepostet habe, führt dich zum QMouseEvent.
Wenn du die Funktion mousePressEvent in deiner QWidget-klasse implementierst, erhälst du dieses Event.

http://doc.trolltech.com/4.3/qwidget.ht ... PressEvent

Dann kannst du abfragen, um welche Maustaste es sich handelt und auch die Koordinaten abfragen, falls du das willst.

Auf dieser seite http://doc.trolltech.com/4.3/widgets-scribble.html
findest du ein Beispielprogramm, welches mousePressEvent benutzt.

Hier der entsprechende Codeausschnitt:

Code: Alles auswählen

void ScribbleArea::mousePressEvent(QMouseEvent *event)
 {
     if (event->button() == Qt::LeftButton) {
         lastPoint = event->pos();
         scribbling = true;
     }
 }

Verfasst: 4. Oktober 2007 11:54
von Zandru
Vermische nicht Signals mit Events.

Sowas grundlegendes wie ein Mausklick ist ein Event, der kann eventuell dazu führen, dass ein Signal ausgelöst wird. Z.B. wenn er auf einem Button passiert. Dann wird z.B. das clicked() signal emittiert.

http://doc.trolltech.com/4.3/qabstractb ... ml#clicked

Damit dann deine Funktion switchScreen() aufgerufen wird, muss du sie zu einem Slot machen und mit diesem Signal per connect() verbinden.

Wenn du wirklich die Maus Clicks oder Tastendrücke "direkt selbst" verarbeiten willst (wozu eigentlich? Wäre hilfreich, wenn du schilderst was du erreichen willst)
Dann musst du entweder Event-Filter installieren http://doc.trolltech.com/4.3/qobject.html#eventFilter

Oder wie QNoob schon schrieb die entsprechenden Event-Handler in deiner QWidget-Klasse überladen.