Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : QComboBox-update() - funktioniert nicht!?



Joker689
09-03-2006, 08:48
Hallo!

Ich habe eine QStringlist "storage" mit etwa 50 Items die beim Öffnen einer Datentabelle (reiner Unicode) mit entsprechenden Werten gefüllt ist
(Diese habe ich bereits auf korrekten Inhalt überprüft, positives Ergebnis) Das Problem ist, das die im Designer erstellte ComboBox "Signature" diese Stringlist als Items erhalten soll, dazu verwende ich den Befehl

Signature->insertStringList(storage);
Zu guter Letzt dann noch ein
Signature->update();

Im Designer habe ich noch Signature unter Connections ein activated(QString&)-Signal an das ui.h-File in den Datenimport-Slot zugewiesen (ich benötige nur im 3ten switch-case-Fall diese Comboboxen).
Daraufhin kompiliert, das Programm gestartet und das entsprechende Datenformat geöffnet, leider OHNE die benötigen BOX-Items.
Kann mir jemand sagen was ich falsch mache?

anda_skoa
09-03-2006, 18:18
Hmm, update() sollte gar nicht nötig sein.

Wenn du nach dem insertStringList die Anzahl der Einträge mit count() kontrollierst, passt es dann?

Und auch nochmal zu einem späteren Zeitpunkt, also wenn es fertig gestartet ist.

Ciao,
_

Joker689
13-03-2006, 12:26
Da gibt es leider ein Problem, ich habe es versucht wie folgt:
int zahl;
...
zahl = Sigs.count();
printf("\nItem-Anzahl betraegt: %d", zahl);

beim Kompilieren liefert es mir dann die Meldung "non-aggregate type" zurueck (mir unverstaendlich, schliesslich ist count() doch ausdruecklich ein QComboBox-Member??)



Ich habe nochmal versucht per Iterator den Stringlist-Inhalt auszugeben (habe nur die Auskommentierungszeichen // entfernt), leider liefert er mir jetzt ueberhaupt nichts mehr zurueck



hier nochmal ein Codeschnipsel des fraglichen Bereiches

i= head.contains("\"", FALSE);
for(g=0; g<i;g++){
storage.append(head.section('"',g,g));
if(storage.isEmpty()){
printf("Keine Items vorhanden!\n");
}
else{
for ( QStringList::Iterator it = storage.begin(); it != storage.end(); ++it ) {
cout << *it << ":";
}
cout << endl;
}
storage.gres("\"","");
Sigs->insertStringList(storage);
zahl = Sigs.count();
printf("\nItem-Anzahl betraegt: %d", zahl);
}

anda_skoa
13-03-2006, 20:41
Sigs ist vermutlich ein Pointer, also ->count()

Ciao,
_

Joker689
14-03-2006, 10:29
Danke anda_skoa!

Also die Anzahl der Items wird jetzt zwar angezeigt aber die QStringlist::Iterator-Sache funktioniert nicht,
d.h. ich bekomme zwar angezeigt das ich 110 Items habe (davon sollten die Hälfte Leerzeichen sein wegen dem separator beim appenden, aber das ist ja an und für sich egal)
aber diese werden (wie in der API beschrieben) mit der Iterator-Verwendung nicht ausgegeben
lieder weiß ich nicht was ich da falsch gemacht habe:confused:

--------------------------

habs gefunden, musste den WErt noch um 1 erhöhen, sieht jetzt so aus

for(g=0; g<i;g++){
g++;
storage[g].append(head.section('"',g,g));
tmp=storage[g];
tmp=tmp.gres("\"","");
storage[g]=tmp;
if(tmp.isEmpty()) {
printf("Keine Items vorhanden!\n");
}
else{
for ( QStringList::Iterator it = tmp.begin(); it != tmp.end(); ++it ) {
cout << *it << "\n" ;
}
cout << endl;
}


Sigs->insertStringList(storage[g]);
Sigs->update();
}

aber irgendwie nimmt es diese Items immer noch nicht in die ComboBox auf, das darf doch nicht daran, dass die im Designer erstellt wurde, liegen oder?

Fiat Nox!
Joker

anda_skoa
14-03-2006, 18:03
Nein, das sollte egal sein.

Nur zur Sicherheit: die Methode endet auch wieder irgendwo und kehrt in die Eventloop zurück, also kann den Widgets ihre Updates zustellen.

Ciao,
_

Joker689
15-03-2006, 09:49
hmm, ich kanns mir zwar nicht erklaeren aber ich hab noch mal etwas umbebaut und ueber Umwege funktioniert es jetzt (fast) so wie ich will, nur ein paar unerwuenschte Items muss ich noch rausfiltern, sollte durch n if/else oder n g++; zu machen sein:


1.)Die QStringList hab ich weggelassen,
2.)Dafuer n Hilfsstring eingefuehrt
3.) Code sieht jetzt wie folgt aus:

line= ts.readLine();

if(line.contains("Block", false)){
head= line;
i= head.contains("\"");

QString tmp;
for(g=0; g<i;g++) {
tmp= head.section('"',g,g);
Rows->insertItem(tmp, -1);
Columns->insertItem(tmp, -1);
Backgrounds->insertItem(tmp, -1);
Sigs->insertItem(tmp, -1);
IDs->insertItem(tmp, -1);
Blocks->insertItem(tmp, -1);
}
Rows->update();
Columns->update();
Backgrounds->update();
Sigs->update();
IDs->update();
Blocks->update();

Jetzt das unerwartete: :eek:
Die Items tauchen nicht von allen auf, ich muss erst ein Zeichen in die (editable=true)
QComboBox (en) eintragen, nochmal das QFiledialog oeffnen, canceln und dann zeigt es mir erst die Items an
Das muss doch auch anders gehen oder?? kann man da nicht nen "Actuate"-Button machen der ein entsprechendes Signal sendet?? ausser dem Befehl update() faellt mir da leider nichts ein :confused:

anda_skoa
15-03-2006, 20:57
Code in ein Archiv packen und anhängen.

Ciao,
_

Joker689
29-03-2006, 17:34
Ich hab die Import-Routine an verschiedene Methoden des Programmablaufs verteilt,
jetzt, da dies erfolgt ist (und der Hauptfehler, das aktualisieren wollen NACH dem eigentlichen INITIALISIEREN, beseitigt wurde)
laeuft das Programm dahingehend ordnungsgemaess