C++ GTKmm ComboBox Probleme
-
Hallo alle zusammen,
Habe gerade ein Problem und zwar nutzt ich die ComboBox für die Auswahl der
COM Schnittstelle. Die angeschlossenen COM Schnittstellen werden aus dem Registry
ausgelesen und dort hinein gefügt. Wenn man jetzt während der Laufzeit eine
Virtuelle Schnittstelle z.B. FTDI-Chip anklemmt möchte ich das Programm nicht
ausschalten sondern habe ein Button hinzugefügt "Update COMx" bei Betätigung des
Buttons wird die Registry erneut eingelesen. Und jetzt kommt das Problem.
Bevor ich die Registry einlese will ich die ComboBox mit dem alten Inhalt löschen
mit "Gtk::ListStore::erase()" meine Liste habe ich folgend benannt "listStore_comx"
daraus resultiert "listStore_comx->erase()" hier mal der Programm teil:void Communication_Interface::initial_comboBox_comx() { unsigned char buffer[10]; if(listStore_comx != NULL) listStore_comx->clear(); listStore_comx = Gtk::ListStore::create(*column_record); comboBox_comx->set_model(listStore_comx); for(unsigned long int counter = 0; read_registry(counter, buffer); counter++) { Gtk::TreeRow row = *(listStore_comx->append()); row[*treeModelColumn_name] = (char*)buffer; row[*treeModelColumn_value] = counter; } comboBox_comx->pack_start(*treeModelColumn_name); comboBox_comx->set_active(0); }
Wenn ich das mache löscht er mir den Inhalt aber nicht raus sondern setzt mir
nochmal die erkannten Schnittstellen neben den alten. Es ensteht ein misch masch!Was ich schon probiert habe ist das ich das ich durch das betätigen des Button eine zwei Signale/Slot Verbindungen gemacht habe. Die erste Verbindung zum
löschen des Inhalts und die zweite zum neu einlesen, geht auch nicht.
Nach meiner Meinung sieht das aus als ob es die ComboBox erst nach der Durchführung der ganzen Funktion neu zeichnet oder so. Weil wenn ich die Signal/Slot Verbindung zum neu einlesen weg lasse und nur die zum löschen ausführen lasse dann löscht er den Inhalt raus.Was kann man da machen???
Bitte um Hilfe!
Falls der ganze Quellcode gebraucht wird bitte mitteilen!Gruß
Tscheburator
-
Versuch mal, mit hide() die Combo-Box zum Verschwinden zu bringen. Dann neu kreieren. Das müsste dafür sorgen, dass sie neu gezeichnet wird. Keine Ahnung, ob das geht, aber bei Null Antworten ist das vielleicht besser als garnichts. Viel Erfolg!
-
Habe die Lösung gefunden.
Gtk::ComboBox ist zusätzlich abgeleitet von Gtk::CellLayout.
In der Klasse Gtk::CellLayout gibt es eine Methode die heißt void clear(),
mit der wird alles was in der ComboBox vorhanden ist gelöscht und das sofort nach aufruf der Funktion.Gruß
Tscheburator