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
SLOT und containerslot
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:
Dann kannst du ja z.B. eine for-Schleife durchlaufen lassen und button mit den Pointern in deinem Array vergleichen.
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);-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
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!
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:
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
einfügen...
Und vielleicht solltest du dir auch mal Schleifen und else if anschauen.
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) {}Und vielleicht solltest du dir auch mal Schleifen und else if anschauen.