C++/QT Slot/Signal Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

C++/QT Slot/Signal Frage

Beitrag von suntsu » 20.02.2005 21:46:54

Tag

Nachdem mein Problem mit dem erstellen von Buttons bereits gelöst wurde ;) habe ich jetzt eine nächste Frage.

Code: Alles auswählen

QObject::connect(arrowButton[i], SIGNAL(clicked()), this, SLOT(arrowPressed()));
Das ganze funktioniert soweit, d.h. die methode arrowPressed wird aufgerufen wenn auf den Button geklickt wird.
Jetzt möchte ich gerne wissen welcher Button gedrückt wurde( http://www.debianforum.de/forum/viewtop ... highlight= ).
Gibt es eine Möglichkeit das rauszufinden?

Bei anderen Sprachen hat man als Argument ja meistens den Sender. Gibt es da auch für QT eine Lösung?

gruss
manuel

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 20.02.2005 22:06:31

Äh, ich glaube nicht dass das geht :?

Was machen wir da nun? Hmm. anda_skoa auf mrunix fragen ;) *hint*

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 22:10:31

Salü peschmae

Ich hab da ein bisschen was gefunden[1], ich finde aber das müsste eleganter gehen als da ne eigene Buttonklasse zu schreiben.

gruss
manuel

[1] http://www.debianforum.de/forum/viewtop ... highlight=

Edit:
Mit einer ButtonGroup würde es wohl auch gehen, aber dann kann ich die Button imo nicht horizontal verteilen.

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 20.02.2005 22:38:14

suntsu hat geschrieben: Edit:
Mit einer ButtonGroup würde es wohl auch gehen, aber dann kann ich die Button imo nicht horizontal verteilen.
Wieso? Du kannst in einer ButtonGroup genauso die Button in einer VBox und/oder HBox beliebig anordnen wie an jeder anderen Stelle im Programm.

Aber wie kannst du in einer ButtonGroup herausfinden von welchem Button das Signal gekommen ist?
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 22:56:38

*

For this specific case, you could group the buttons in a QButtonGroup.
The QButtonGroup emits a clicked(int) signal containing the id of the
button that was clicked when one of its buttons is clicked.
Das hab ich von [1]

gruss
manuel

[1] http://lists.trolltech.com/qt-interest/ ... 00720.html

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 20.02.2005 23:08:46

suntsu hat geschrieben:
*

For this specific case, you could group the buttons in a QButtonGroup.
The QButtonGroup emits a clicked(int) signal containing the id of the
button that was clicked when one of its buttons is clicked.
Das hab ich von [1]

gruss
manuel

[1] http://lists.trolltech.com/qt-interest/ ... 00720.html
ok, habe ich auch gerade in der doku gefunden. Dann kannst du ja eine ButtonGroup verwenden, dann mußt du auch nicht das clicked-Signal von jedem Button einzeln verbinden.
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 20.02.2005 23:49:34

so, hier jetzt die Lösung

Code: Alles auswählen

    QButtonGroup *myButtonGroup = new QButtonGroup(1, Qt::Vertical, this );
    myButtonGroup->setGeometry(20, 100, 480, 60);
    myButtonGroup->setMargin(0);
    myButtonGroup->setInsideMargin(0);
    myButtonGroup->setInsideSpacing(0);
    QObject::connect(myButtonGroup, SIGNAL(clicked(int )), this, SLOT(arrowPressed(int )));
    for(int i = 0;i<8;i++){
        arrowButton[i] = new QPushButton("",myButtonGroup);
         arrowButton[i]->setFlat(true);
         arrowButton[i]->setPixmap(*arrowPixmap);
         arrowButton[i]->setFixedSize(60,60);
    }
edit:
Aber ich finde das jetzt schon ein bisschen Umständlich...(evt. Verstehe ich es auch noch ned richtig.)

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 21.02.2005 07:24:05

Hier jetzt mal einen ersten Screenshot von dem ganzen...[1]

gruss
manuel

[1] http://www.suntsu.ch/stuff/VierGewinnt.png

Benutzeravatar
BeS
Moderator
Beiträge: 3236
Registriert: 17.04.2002 18:30:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von BeS » 21.02.2005 14:38:47

suntsu hat geschrieben:Hier jetzt mal einen ersten Screenshot von dem ganzen...[1]
Sieht ja wirklich ganz nett aus. Sind jetzt nur die obere Reihe (grüne Pfeile) Buttons oder das ganze Feld? Wo hast du denn die Texturen dafür her? Selber gemacht?
Deine Unterstützung für Freie Software kostet dich nur wenige Minuten: www.fsfe.org/support

Ich spreche von Freier Software!

deepblue
Beiträge: 4
Registriert: 17.02.2005 22:33:56

Beitrag von deepblue » 21.02.2005 14:44:36

Du bekommst den Sender einer ID mittels QObject::sender() heraus.

Schau mal hier: http://doc.trolltech.com/3.3/qobject.html#sender

Beispiel für ein QHttp Object

Code: Alles auswählen

  QObject *sb = const_cast<QObject *>(sender());
  QHttp *current_http = dynamic_cast<QHttp *>(sb);

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 21.02.2005 15:28:55

BeS hat geschrieben:
suntsu hat geschrieben:Hier jetzt mal einen ersten Screenshot von dem ganzen...[1]
Sieht ja wirklich ganz nett aus. Sind jetzt nur die obere Reihe (grüne Pfeile) Buttons oder das ganze Feld? Wo hast du denn die Texturen dafür her? Selber gemacht?
salü

Alles Buttons. Und der Pfeil hab ich mir von einem Icon abgekupfert, und die Kreise selbst gemacht.

gruss
manuel

Benutzeravatar
suntsu
Beiträge: 2947
Registriert: 03.05.2002 10:45:12
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: schweiz
Kontaktdaten:

Beitrag von suntsu » 21.02.2005 15:30:11

deepblue hat geschrieben:Du bekommst den Sender einer ID mittels QObject::sender() heraus.

Schau mal hier: http://doc.trolltech.com/3.3/qobject.html#sender

Beispiel für ein QHttp Object

Code: Alles auswählen

  QObject *sb = const_cast<QObject *>(sender());
  QHttp *current_http = dynamic_cast<QHttp *>(sb);
Tag

Das war eigentlich das Verhalten das ich anfangs gesucht hatte. Jetzt hab ich es allerdings bereits mit der GroupBox und dem clicked(int) Signal gelöst.

gruss
manuel

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 21.02.2005 18:42:08

deepblue hat geschrieben:Du bekommst den Sender einer ID mittels QObject::sender() heraus.

Schau mal hier: http://doc.trolltech.com/3.3/qobject.html#sender
Danke. Mal wieder was gelernt :)

Naja, wenn man am falschen Ort sucht wird man halt nicht fündig.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

Antworten