Seite 1 von 1
QTextEdit QTextBrowser
Verfasst: 4. Februar 2011 09:23
von darkshine
Guten Morgen Forum,
ich schaffe es einfach nicht das passende Textfenster zu erstellen.
Also in dem Textfenster müssen (dürfen) keine Eingaben gemacht werden. Es werden nur Daten von einer RS232 Schnittstelle ausgegeben.
Ich hätte gerne ein Textfenster:
1. nicht Editierbar
2. mit blickenem Cursor (eher für die Optik)
3. Es soll Text markiert werden können um diesen z.B zu kopieren. Verändert werden soll man den Text natürlich nicht können.
4. Und hier liegt mein Problem:
Es kommen immer wieder neue Infos aus der Schnittstelle. Wenn ich jetzt mit meiner Maus irgendwo ins Textfenster klicke, werden die "neu" empfangenden Texte an diese Position eingefügt,an die ich gerade geklickt habe und es entsteht Chaos. Diese sollen aber IMMER ans Ende eingefügt werden und nicht irgendwo mittendrin.
Also auf Punkt 2 und 3 könnte ich verzichten. Ich habe auch versucht die Maus für mein Textfenster "abzuschalten" aber irgendwie ändert er doch immer wieder die Cursorposition und fügt den Text dann dort ein und nicht ans Ende
Vielen Dank
Verfasst: 4. Februar 2011 09:39
von Exasperation
Hast du dir schon
QPlainTextEdit näher angeschaut?
Using QPlainTextEdit as a Display Widget
The text is set or replaced using setPlainText() which deletes the existing text and replaces it with the text passed to setPlainText().
Text can be inserted using the QTextCursor class or using the convenience functions insertPlainText(), appendPlainText() or paste().
By default, the text edit wraps words at whitespace to fit within the text edit widget. The setLineWrapMode() function is used to specify the kind of line wrap you want, WidgetWidth or NoWrap if you don't want any wrapping. If you use word wrap to the widget's width WidgetWidth, you can specify whether to break on whitespace or anywhere with setWordWrapMode().
The find() function can be used to find and select a given string within the text.
If you want to limit the total number of paragraphs in a QPlainTextEdit, as it is for example useful in a log viewer, then you can use the maximumBlockCount property. The combination of setMaximumBlockCount() and appendPlainText() turns QPlainTextEdit into an efficient viewer for log text. The scrolling can be reduced with the centerOnScroll() property, making the log viewer even faster. Text can be formatted in a limited way, either using a syntax highlighter (see below), or by appending html-formatted text with appendHtml(). While QPlainTextEdit does not support complex rich text rendering with tables and floats, it does support limited paragraph-based formatting that you may need in a log viewer.
1. setReadOnly( true );
2. müsste automatisch dieser Text Cursor sein (dessen Breite du ebenfalls einstellen kannst)
3. müsste dementsprechend auch automatisch möglich sein
4. siehe obiger Text, du kannst Text auch am Ende einfügen
Verfasst: 4. Februar 2011 09:40
von franzf
Das eigentliche Problem (4) löst du durch die Verwendung des passenden SLOTS... Wenn du Anhängen willst, solltest du auch Anhängen, das heißt im Englischen "append" und nicht "insert". insert[Html,PlainText] fügen am Cursor ein.
Wenn das immer noch nicht geht, brauchen wir Code.
Verfasst: 4. Februar 2011 09:48
von Exasperation
franzf hat geschrieben:Wenn du Anhängen willst, solltest du auch Anhängen, das heißt im Englischen "append" und nicht "insert".
Ich vermute, er hat entweder von QTextEdit oder QPlainTextEdit abgeleitet und beide können append. Sollte eigentlich funktionieren...
Verfasst: 4. Februar 2011 10:04
von darkshine
appendPlainText wäre super. Leider empfange ich immer nur 1 Zeichen. Und bei appendPlainText wird dann immer eine neue Zeile angefangen. So wird aus Hello World
H
E
L
L
O
W
O
R
L
D
Wenn ich das abstellen könnte wäre mein Problem gelöst. Sonst werde ich versuchen, den textCursor mit dem Signal textChanged() zu verbinden und den dann immer ans Ende springen lassen.
Verfasst: 4. Februar 2011 10:17
von Exasperation
Das liegt daran, dass QPlaintTextEdit::appendPlainText immer einen neuen Abschnitt eröffnet. Was wäre wenn du stattdessen ein QTextEdit verwendest und dann mit QTextEdit::append arbeitest? Versuch das mal.
Verfasst: 4. Februar 2011 20:28
von franzf
Du schreibst dir wahrscheinlich sowieso ne Qt-Wrapper-Klasse um dein RS232-Interface herum. Dann sammle doch dort gleich alle Daten in nem Buffer, und wenn ein newline kommt schickst du ein SIGNAL newLine(QString) raus und connectest es an den SLOT im PlainTextEdit. Wenn das so einfach nicht geht, weil du alle chars brauchst, sammel doch speziell für die Ansicht in einer eigenen Pufferklasse die Chars Zeilenweise und sende sie raus. Wenn aber den User wirklich jeder neue Char sofort interessiert, dann musst du wohl einen QTextBrowser nehmen und append()en.