Konfigurationsdialog mit KConfigXT
Autor: taki
Hallo Leute. Ich bin gestern ziemlich lange an einem Problem verzweifelt. Es war eins von der Sorte, wo man die Hände über dem Kopf zusammenschlägt und "Oh mann, bist Du doof..." schreit, wenn man es hinbekommen hat.
Ich habe in kdevelop ein neues Projekt für eine Applikation mit KConfigXT erstellt. Den Konfigurationsdialog habe ich dann mit dem QtDesigner so eingerichtet, wie ich es haben wollte und die XML-Dateien für den Konfigurationscompiler von KDE nach dem Tutorial angepasst.
http://developer.kde.org/documentation/tutorials/kconfigxt/kconfigxt.html
Bei Spinboxen, Checkboxen und Eingabefeldern klappt das genial einfach. Ich habe aber auch Komboboxen in meinem Konfigurationsdialog. Wenn man eine Kombobox an KConfigXT anbindet (durch Benennen des Objektes mit kcfg_feldname), bekommt man anstelle des ausgewählten Textes den Index der Kombobox in die Konfiguration geschrieben.
Die simple Lösung:
- 1. Entkopple die Kombobox durch Umbenennen in feldname (d.h. nimm das Präfix "kcfg_" weg).
- 2. Lege ein (verstecktes) Eingabefeld im Konfigurationsdialog mit dem Bezeichner kcfg_feldname an.
- 3. Verbinde die Slots feldname::highlighted (QString) mit kcfg_feldname::setText(QString).
Fertig, jetzt kommt wirklich der ausgewählte Text in der Konfig an!
Mit der neulich geposteten Lösung klappt das Sichern der Konfiguration nach Auswahl aus einer Kombobox. Es bleibt aber noch etwas zu tun. Wenn man nur obige Lösung alleine umsetzt, wird beim nächsten Programmstart nur der erste Eintrag der Kombobox angezeigt, obwohl ein anderer Eintrag in der Konfiguration steht.
Beim Einlesen muss der Wert des versteckten Eingabefeldes noch an die Kombobox zurückgegeben werden. Dazu verknüpft man den Slot textChanged (const QString*) von kcfg_feldname mit dem Slot setCurrentText (const QString*) der Kombobox feldname.
Qt verhindert selbst eine Endloßschleife, indem es setCurrentText nur ausführt, wenn der Text verändert wurde. Die Kombobox zeigt aber nun immer auch den eingelesenen Wert aus der Konfiguration an.
eingefügt von --Yehudi 16:38, 21. Sep 2006 (CEST)