Seite 1 von 1

noch einmal slots...

Verfasst: 26. März 2009 11:26
von mine
hallo!

dieses slot-signal konzept rall ich immer noch nicht - ich bekomme zwar eine connection, aber ich schaffe es nicht variablen zu übergeben. Trotz! google, wikipedia und diversen tutorials. hat jemand zufällig ein einfaches beispeil, in dem er einen knopf x erstellt, der beim click eine funktion y aufruft, die weiß, dass sie von X aufgerufen wurde??

das wäre schön!

danke!

Verfasst: 26. März 2009 11:37
von pfid
1) Signale und Slots müssen die gleichen Parameter haben.
Das heißt: Wenn dein Signal clicked() des Buttons keine Parameter hat, darf der damit verbundene Slot auch keine Parameter haben. Dementsprechen kannst du so keine Werte übergeben.
2) Den "Absender" des Signals kriegst du mit der Funktion sender():

Code: Alles auswählen

int MyClass::init()
{
   connect(myButton, SIGNAL(clicked()), this, SLOT(mySlot());
}

void MyClass::mySlot()
{
   QPushButton* b = qobject_cast<QPushButton*>(sender());
   
   if (b && b == myButton)
     qDebug() << "my button was pressed";
}
3) Wozu willst du wissen, WELCHER button gedrückt wurde? Machs dir doch einfacher, und mache pro Button einen Slot. In der Regel willst du für einen Button doch eine bestimmte Aktion haben, und nicht 10 Knöpfe die (fast?) das gleiche tun.

Code: Alles auswählen

int MyClass::init()
{
   connect(myOpenButton, SIGNAL(clicked()), this, SLOT(myOpenSlot());
   connect(myCloseButton, SIGNAL(clicked()), this, SLOT(myCloseSlot());
}

void MyClass::myOpenSlot()
{
   open();
}

void MyClass::myCloseSlot()
{
   close();
}

Verfasst: 26. März 2009 11:44
von mine
hallo! danke für die antwort - ich werde es gleich versuchen.

ein slot und ein button: ich habe ein button-array unbekannter länge...

Verfasst: 26. März 2009 11:53
von macman
QSignalMapper

Verfasst: 26. März 2009 11:54
von Strahlex
Oder du verwendest einen SignalMapper, dann kannst du auch andere Werte übergeben.

Verfasst: 29. März 2009 10:07
von mine
danke, das mit dem knopf hat sehr gut gekklappt!