Seite 1 von 1

QWidget - bzw. QTextEdit - Problem

Verfasst: 26. Dezember 2008 01:14
von Gapa
Hallo,

ich habe 2 Fragen:

1. Ich leite bisher alle meine Fensterklassen von QDialog ab, da nur diese Klassen die exec()-Funktion haben.
Diese Funktion benötige ich, um ein Fenster aus einem anderen Fenster aus zu öffnen, da ich ja nicht einfach ein zweites QApplication-Objekt erstellen und per exec() ausführen lassen kann.
Meine Frage nun: Wie realisiere ich sowas mit einer von QWidget direkt abgeleiteten Klasse??

2. Ich habe in meinem Fenster ein Objekt der Klasse QTextEdit.
Dieses Fenster wird während des Ablaufs oft aktualisiert, und dabei muss der komplette Inhalt überschrieben werden. Dazu muss ich folglich erst einmal den kompletten Inhalt des Edits löschen, und dann den neuen Text einfügen.
Zum Löschen des Inhaltes habe ich die Funktion clear() gefunden.
Jedoch meldet Windows beim Ausführen des Programms mit dieser Funktion stets einen unbekannten Fehler!
Starte ich das Programm ohne diese Funktion, so funktioniert alles prima, jedoch wird immer der neue Text einfach an den alten Text angehängt...!
Kann das daran liegen, dass das Editfeld auf ReadOnly gesetzt ist?? Aber ich habe es auch schon mal versucht, das ReadOnly vor der clear()-Funktion auszuschalten, jedoch kam immer noch diese Fehlermeldung!!
Woran liegt das??

Ich hoffe auf ein paar gute Antworten auf diese beiden Fragen!

Viele Grüße
Gapa

Verfasst: 26. Dezember 2008 01:48
von RD1978
zu 1.)
Ein QDialog ist ein QWidget. Alles was Du siehst ist ein QWidget. Die Methode exec() der Klasse QDialog ruft den Dialog lediglich als Modal Dialog auf. Das heißt der Dialog blockiert alle anderen Fenster, solange bis der Dialog selbst (mit einem Dialogcode) beendet wird. Ein normales QWidget wird mit der Methode show() aufgerufen.

zu 2.)
QTextEdit sollte mit der Methode clear() den Inhalt eigentlich ohne Probleme löschen, auch wenn es ReadOnly ist. Der Fehler muss also an anderer Stelle liegen.

...

Verfasst: 26. Dezember 2008 14:20
von Gapa
Hallo,

sorry aber diese Antwort hilft mir leider nicht richtig weiter!

zu 1.:
Ich habe herausgefunden, dass die clear()-Funktion nur in meinem Slot spinnt. Wenn ich sie direkt nach dem Erstellen des TextEdits noch im Konstruktor aufrufe, so kommt keine Fehlermeldung! Woran könnte das liegen??
Mir ist auch aufgefallen, dass in diesem Slot auch die setPlainText-Funktion nicht tut, sondern lediglich die append-funk. und die insertPlainText-Funk.
Woran könnte das liegen, dass manche Funktionen tun und manche nicht??


zu 2.:
Ja aber wenn ich ein QWidget nur mit show() aufrufe, so erscheint es für einen Bruchteil einer Sekunde und verschwindet dann auch schon wieder... woran könnte das liegen und wie behebe ich dieses Problem?

Hoffe auf hilfreiche Antworten!
Viele Grüße
Gapa

Verfasst: 26. Dezember 2008 15:14
von RD1978
zu 1.)
Also bei mir funktionieren diese Methoden, mit oder ohne Slot. Aber vllt. zeigst Du uns mal ein wenig Code.

zu 2.)
Ich geh mal davon aus, das Du ein Objekt von QWidget innerhalb einer Methode deklariert hast. Dann ist es kein Wunder, daß es sich gleich wieder beendet. Nachdem die Methode abgearbeitet ist, ist das Object auch nicht mehr gültig. Das Objekt muss global in der Klasse deklariert werden.

Verfasst: 26. Dezember 2008 15:19
von franzf
Das ist alles bissl wenig Info, deshalb auch nahezu unmöglich zu helfen :(

Zu 1) zeig uns bitte den code, der im slot ausgeführt wird.
zu 2) ich denke zwar, dass ich weiß was paasiert (du zeigst das fenster in einer funktion, wobei nach ausführung der funktion der skope futsch und das widget-objekt tot ist ;). aber bitte auch hier code...

grüße
franz