QComboBox SIGNAL funktioniert nicht

Alles rund um die Programmierung mit Qt
Antworten
Gapa
Beiträge: 63
Registriert: 4. Juli 2008 14:33
Kontaktdaten:

QComboBox SIGNAL funktioniert nicht

Beitrag von Gapa »

Hallöle,

ich habe mir eine QComboBox mit den Inhalten 1,2,3,4,5 erstellt, und würde nun immer gerne je nach Wahl des Andwenders einen von mir festgelegten SLOT darauf reagieren lassen:

Hier mein Code:

Code: Alles auswählen

  gb_count = new QGroupBox("Anzahl", this);
  gb_count->setGeometry(5, 5, 185, 50);
  QComboBox cb_parties = new QComboBox(gb_count);
  cb_parties->setGeometry(120, 19, 50, 20);
  cb_parties->addItem("1");
  cb_parties->addItem("2");
  cb_parties->addItem("3");
  cb_parties->addItem("4");
  cb_parties->addItem("5");

  connect(cb_parties, SIGNAL(currentIndexChanged()), this, SLOT( reagiere()));
Soweit so gut!
Die ComboBox wird erzeugt, jedoch kann ich sie so oft ich will anklicken, den Index verändern etc, es wird nie der SLOT aufgerufen, wieso??
Mit Index ist hier aber schon die aktuelle Auswahl gemeint, oder etwa die Anzahl aller Optionen??
Ist der Index in diesem Beispiel 0 (also "1"), oder die Anzahl aller Optionen (also 4)??
Und kann ich das Signal überhaupt so aufrufen? Oder welchen Index muss ich als Parameter mitgeben? Ich habe alle möglichen Indexe schon versucht, jedoch wird nie der SLOT aufgerufen...wieso?

Grüße
Gapa
Gestern war heute noch morgen!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was ist mit

Code: Alles auswählen

connect(cb_parties, SIGNAL(currentIndexChanged(int)), this, SLOT( reagiere()));
Aber es steht eigentlich auf der Konsole, dass kein Signal "currentIndexChanged()" existiert, oder?
Gapa
Beiträge: 63
Registriert: 4. Juli 2008 14:33
Kontaktdaten:

int

Beitrag von Gapa »

Hallo,

ja ich weiß, dass der Funktion Parameter fehlen, aber:
1. mein Compiler meldet keinen Fehler
2. selbst wenn ich eine Zahl als Parameter mitgebe, oder nur int schreibe, oder int i oder etwas ähnliches schreibe, so reagiert das Signal trotzdem nicht...Wieso??
Was für eine Zahl muss ich denn überhaupt als Parameter angeben?


Grüße
Gapa
Gestern war heute noch morgen!
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Der Compiler liefert keinen Fehler, weil der Slot-Aufruf erst dynamisch zur Laufzeit von QObject geregelt wird. Du musst beim Ausführen des Programms schauen, ob auf der Konsole eine Fehlermeldung steht.
Gapa
Beiträge: 63
Registriert: 4. Juli 2008 14:33
Kontaktdaten:

int

Beitrag von Gapa »

Hallo,

ja ok aber das bringt mich ja doch nicht weiter, wenn ich nicht weiß was ich als Parameter angeben sollte??
Ich habe bereits alle möglichen Integerwerte mit angegeben:
- anzahl Elemente
- Startelement
- alle weiteren Elemente
- nur eine Integer-variable

aber bei keinem SIGNAL kommt eine Reaktion (egal ob "activated()", "highlighted()", "currentIndexChanged()" etc...).

Was bitte soll ich denn schreiben...

Ist dieses Kommando denn falsch:
connect(cb_parties, SIGNAL(activated(1)), SLOT(tueetwas()));

??

Grüße
Gapa
Gestern war heute noch morgen!
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Das stört mich ehrlich gesagt auch, dass man da den Wert nicht hineinschreiben kann, aber du musst wohl in einer Funktion per switch den Wert überprüfen.
Leider gibt es auch nur einen SignalMapper in der Bibliothek und keinen SlotMapper. :(
Gapa
Beiträge: 63
Registriert: 4. Juli 2008 14:33
Kontaktdaten:

switch

Beitrag von Gapa »

Hallöle,

ok und wie prüfe ich denn den Wert am Besten? - Denn schließlich ist ja genau das mein Ziel - zu prüfen welcher Wert aktiviert wurde...
Aber ich komme ja nicht mal zu einer Prüfung, wenn ich nicht angeben kann, auf welche SIGNALS überhaupt geprüft werden soll...
Kann mir denn keiner sagen, wie ich diese blöde ComboBox richtig mit einem Slot verbinde??

Grüße
Gapa
Gestern war heute noch morgen!
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Also du machst einen neuen Slot:

Code: Alles auswählen

void itemSelected(int value)
{
  switch(value)
  {
    case 1:
      tueetwas();
      break;
    case 0:
      tuewasanderes();
      break;
    default:
      tuedenstandardfall(value);
      break;
  }
}
Und die Combobox verbindest du dann mit diesem Slot.
Antworten