Seite 1 von 1

[gelöst] Problem mit QSpinBox und QComboBox

Verfasst: 20. Mai 2005 13:50
von wecka
Hi!


Ich habe ein QMainWindow als Anwendung.
Dort gibt es im Hauptmenü drei Punkte, die auf Dialoge für verschiedene Einstellungen verweisen, welche mit QSettings gespeichert werden.
Dazu hat jeder Dialog einen Slot saveSettings(), welcher mit dem clicked()-Ereignis von dem Speichern-Button verknüpft wird.

Nun habe ich das Phänomen, dass die drei Dialoge sich völlig unterschiedlich verhalten, obwohl auf gleiche Weise implementiert:

1) Dialog 1 -> 2 QLineEdit
Hier funktioniert alles super!

2) Dialog 2 -> 1 QLineEdit, 1 QComboBox, 1 QCheckBox, 2 QDial, 2 QSpinBox
Die QDial sind mit den QSpinBox synchronisiert.
Das Auswerten der Combobox funktioniert (mybox->currentText()).
Wenn ich versuche die QSpinBox auszuwerten (myspinbox->value()), stürzt das Programm ab.

3) Dialog 3 -> 1 QSlider, 1 QSpinBox, 2 QComboBox
Der QSlider ist mit der QSpinBox synchronisiert.
Hier funktioniert auch die SpinBox nicht, ausserdem bekomme ich hier auch einen Absturz beim Auswerten der ComboBoxen (sowohl über currentText() als auch über text(currentItem()).


Ich habe gestern schon sechs Stunden über dem Problem gebrütet, leider weiss ich nun nicht mehr, wo ich ansetzen soll...

Plattform: WinXP Prof.
IDE: MS VC++ 6
QT: 3.2.3

Verfasst: 20. Mai 2005 15:55
von FlorianBecker
Hi,

poste mal bitte den Code dazu. Deinen Ausführungen kann ich nur entnehmen, was passiert, aber eben nicht wie es passiert.

Danke.

Verfasst: 20. Mai 2005 16:01
von wecka
Hi!

Danke, ich habe es eben herausgefunden :roll:

Verfasst: 20. Mai 2005 16:10
von FlorianBecker
Hi,

du benutzt bestimmt das normale Qt C++, oder? Also nicht Bindings ala Python?

Jede der this -> Anweisungen kannst du rauswerfen, braucht man nicht.

Wieso machst du Settings als Pointer? Das könnte auch schon ein Fehler, bzw. mögliches Speicherleck sein.

deleten bräuchte man in Qt gar nicht, das macht Qt selbstständig, wobei schon des öfteren gesagt wurde sicher ist sicher. Ich tendiere allerdings immer zu nicht löschen, da fehlerhafte deletes schnell Abstürze verursachen und der evtl. mehrspeicher ist auch nur bei riesen Variablen wichtig, oder auf uralt Rechnern. Also eigentlich gar nicht.

Wieso ließt du vor dem Speichern die ganzen Settings? Sollte man nicht die Settings einmal lesen, in Variablen halten und dann bei jedem überschreiben der Konfig auch die Variablen überschreiben, jedoch Global halten?

Zusammenfassung:
Woran es liegt ist schwerer zu sagen, müsste man ausprobieren, was ich allerdings denke ist die Settings als Pointer mit delete sind das Problem.
Die this -> Anweisungen sind zwar unnötig, sollten aber nicht zu einem Absturz führen. Die Settings Klasse funktioniert einwandfrei? Hast du mal den Debugger benutzt, um zu sehen, wo er genau abstürzt?

Verfasst: 20. Mai 2005 16:11
von FlorianBecker
Mh, ok, und möchtest du es nicht posten?

Verfasst: 20. Mai 2005 17:45
von wecka
Sorry, ich hatte einfach zu viele Pointer drin.
Die Settings sind übrigens mit Absicht so gelöst (hängt mit der Architektur der gesamten Anwendung zusammen).

Der Fehler war (z.B.) dieser:
QSpinBox meinespinbox* = new...

Jetzt habe ich statt desse
meinespinbox = new...


Trotzdem danke noch mal ;-)
Auch für die anderen Hinweise, ich werde sie zu beherzigen wissen!!!