SLOT und containerslot

Alles rund um die Programmierung mit Qt
Antworten
Mido
Beiträge: 18
Registriert: 30. Mai 2008 10:21

SLOT und containerslot

Beitrag 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
TSS
Beiträge: 73
Registriert: 24. November 2009 15:40
Kontaktdaten:

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Oder QSignalMapper
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mido
Beiträge: 18
Registriert: 30. Mai 2008 10:21

Beitrag 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!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Liest Du überhaupt was wir vorschlagen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TSS
Beiträge: 73
Registriert: 24. November 2009 15:40
Kontaktdaten:

Beitrag 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.
Mido
Beiträge: 18
Registriert: 30. Mai 2008 10:21

Beitrag von Mido »

@TTS
danke für den Tip: damit geht das ja so richtig einfach.ist gelöst
Antworten