Seite 1 von 1

SLOT und containerslot

Verfasst: 2. April 2010 13:08
von Mido
Hallo zusammen,
ich hab hier diese Codeabschnitt :

PushButton * Button [16];
unsigned short keys ;

for(int i=0;i<16;i++){
QObject::connect(Button[i],SIGNAL(pressed()),this,SLOT(setbit()));
}

wird 1. Button gedrückt dann ist das 1. bit in keys gesetzt .
wird 2. Button gedrückt dann ist das 2. bit in keys gesetzt u.s.w.........

mein Problem lautet: wie kann ich mein eigene Sammelslot implementieren?
also statt 16 mal setbit() für jede Taste ,will ich nur eine Funktion setbit() mit if Abfrage .
danke im voraus

Verfasst: 2. April 2010 13:18
von TSS
Wenn ich dein Problem richtig verstanden habe, dann möchtest du herausfinden, welcher Button deinen Slot aufruft, um dann eben entsprechend zu reagieren.
Folgender Code gibt dir im Slot den Button, der den Slot aufgerufen hat:

Code: Alles auswählen

QObject* sender = const_cast<QObject*>(QObject::sender());
QPushButton* button = static_cast<QPushButton*>(sender);
Dann kannst du ja z.B. eine for-Schleife durchlaufen lassen und button mit den Pointern in deinem Array vergleichen.

Verfasst: 2. April 2010 15:18
von Christian81
Oder QSignalMapper

Verfasst: 2. April 2010 16:27
von Mido
bei mir setbit() seht so aus :

void Gui::setbit(){

if (Button[1])
{
keys=keys|0x0001;
}
if (Button[2])
{
keys=keys|0x0002;
}
//bis.............................
if(Button[16])
{
keys=keys|0x8000;
}
Problem ist : egal welche Taste ich drücke "keys" nehmt immer den letzten Wert 0x8000;wie soll es entschieden das die gewünschte Taste gedrückte ist.
habe ich mit if(Button[1]->pressed()) versucht hat es auch nicht geklappt!

Verfasst: 2. April 2010 16:40
von Christian81
Liest Du überhaupt was wir vorschlagen?

Verfasst: 2. April 2010 16:43
von TSS
Deine Methode kann so nicht funktionieren. Da alle Zeiger in dem Array auf ein Objekt zeigen, ist die if-Abfrage immer true. Deshalb werden alle Abfragen durchgeführt.
Das mit dem pressed() kannst du auch vergessen, das ist ein Signal, es gibt also nicht true oder false zurück.
Wir haben dir 2 Möglichkeiten gezeigt, wie du dein Problem lösen kannst. Wenn du meine Methode nehmen willst musst du nur die beiden Zeilen Code in deinen Slot kopieren und dann eben immer Abfragen wie

Code: Alles auswählen

if(Button[1]==button) {}
einfügen...
Und vielleicht solltest du dir auch mal Schleifen und else if anschauen.

Verfasst: 3. April 2010 02:34
von Mido
@TTS
danke für den Tip: damit geht das ja so richtig einfach.ist gelöst