Seite 1 von 1

[Qt4] Q3MultiLineEdit -> QTextEdit

Verfasst: 29. September 2005 13:33
von alike
Hi ihr,

ich bin noch immer dabei ein altes auf Qt3 basierendes Projekt,
mit meiner bescheidenen C++ ERfahrung, auf Qt4 um zustellen.

Momentan häng ich bei einem Speicherschutzproblem,
welches mit Q3MultiLineEdit zusammenhängt.
Aus der Docu geht hervor das dieses durch QTextEdit ersetzt wurde
was ich auch gleich probiert habe.

FocusInEvent, FocusOutEvent und KeyPressEvent sind implementiert.

Die Sachen die ich geändert hab sind natürlich die Oberklasse,
nicht mehr Q3MultiLineEdit sondern QTextEdit.

In den Event-Funktionen hab ich an den stellen wo es
auftacht Q3MultiLineEdit::focusOutEvent()
etc. durch QTextEdit::focusOutEvent() ersetzt.

Soweit sogut, nur bekomm ich im laufenden Programm nun eine
Speicherzugriffsverletzung... Im Debugger wird mir das angeben:

Code: Alles auswählen

Program received signal SIGSEGV, Segmentation fault.
0x080552c4 in QListData::size (this=0x10) at qlist.h:65
/usr/local/Trolltech/Qt-4.0.0/include/QtCore/qlist.h:65:2051:beg:0x80552c4
die entsprechende Zeile im qlist.h ist:
inline int size() const { return d->end - d->begin; }

Woran liegt nun das Problem? Ist kein Speicher für den QTextEdit
inhalt verfügbar? Oder wo greif ich falsch auf nen Speicher zu?

Bis Auf die Oberklasse und die oben genannten Event-Funktionen von
QTextEdit hab ich nichts geändert.


Ich hoffe mir kann wiedermal geholfen werden.

Mfg
AliKe

Re: [Qt4] Q3MultiLineEdit -> QTextEdit

Verfasst: 29. September 2005 14:30
von macman
alike hat geschrieben:Woran liegt nun das Problem? Ist kein Speicher für den QTextEdit inhalt verfügbar? Oder wo greif ich falsch auf nen Speicher zu?
Hast Du dein Programm schon mal durch den Debugger laufen lassen? Wahrscheinlich greifst Du irgendwo auf eine Textstelle zu, die es noch nicht gibt. Prüfungen gegen NULL mußt Du jetzt selbst vornehmen. Abgesehen davon solltest Du auch auf 4.0.1 updaten.

Verfasst: 29. September 2005 14:33
von alike
Der Debugger gibt das aus, was oben im

Code: Alles auswählen

-Teil steht.
Irgendwas scheint mit dem Signal und Qlist.size() nicht zu stimmen.

Aber aus dem Debugger werd ich nicht schlau...

Verfasst: 29. September 2005 14:41
von macman
alike hat geschrieben:Aber aus dem Debugger werd ich nicht schlau...
Du mußt dein Programm schon Schritt für Schritt ausführen, um langsam an den Ort des Problems zu gelangen. Die Schutzverletzung tritt im Qt-Code auf und jetzt mußt Du den entsprechenden Aufruf in deinem Code suchen. Wenn Du den hast, ist das Problem meist schon offensichtlich.

Wie das mit deinem Debugger geht, werden Dir andere erklären müssen, ich bin mit Windows unterwegs.

Verfasst: 29. September 2005 19:25
von Christian81
"man gdb" würde ich da sagen... dann hätte man zumindest den Befehl 'bt' gefunden der Dir unter Garantie weiterhilft (wenn dein Proggie als debug kompiliert wurde, was es normalerweise beim Entwickeln sein sollte).