[gelöst] Schnell Text auf dem Bildschirm plotten.

Alles rund um die Programmierung mit Qt
Antworten
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

[gelöst] Schnell Text auf dem Bildschirm plotten.

Beitrag von bw1faeh0 »

Hallo Leute,

ich habe das Problem, dass ich recht schnell (ca. alle 10..100ms) Textzeilen (10..100 Zeichen) auf dem Bildschirm ausgeben muss.

Derzeit nutze ich ein QTextEdit dafür. Dabei nutze ich append(QString) um neue Zeilen an die bestehenden anzuhängen. Dabei scrollt das QTextEdit, was den ganzen Prozess imens bremst.

Ich habe statt append (QString) auch insertPlainText(QString) genutzt. Dabei scrollt das QTextEdit nicht automatisch, was eigentlich OK ist. Nun würde ich noch gerne den neuen Text nicht ans Ende einfügen, sondern an den Anfang des QTExtEdits.
Gibt es eine einfache Möglichkeit den Cursor an den Anfang zu schieben, a la moveCursorToBegin() oder so?

Oder gibt es vielleicht eine viel bessere Methode Viel Text schnell auf dem Bildschirm darzustellen??

Grüße

Christian
Zuletzt geändert von bw1faeh0 am 24. Oktober 2007 08:41, insgesamt 1-mal geändert.
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

Also ich bin erstmal wieder auf appen(QString umgestiegen), da mir das auch den zu letzt eingefügten Text auch anzeigt.

Ich habe die Scrolleisten ausgeblendet, dadurch habe ich nochmal einen großen geschwindigkeitsvorteil bekommen.

Gibt es noch andere Ideen und Ansätze?
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

textcursoor an den anfang bewegen geht per

Code: Alles auswählen

QTextCursor cursor = irgendeinTextEdit->textCursor();
cursor.movePosition( QTextCursor::Start );
wenn du etwas an den anfang eines qstring setzen willst, geht das aber per prepend():

Code: Alles auswählen

QString str = "Welt";
str.prepend( "Hallo " );
str.append( '!' );
mfg,
julian
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

mhh... also

Code: Alles auswählen

QTextCursor cursor = irgendeinTextEdit->textCursor(); 
irgendeinTextEdit->insertPlainText(data);
irgendeinTextEdit->setTextCursor(cursor);
cursor.movePosition( QTextCursor::Start );
fügt die Daten 'oben' ein... es ist jetzt nur A****-langsam geworden :(
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

Gibt es evtl die Möglichkeit die Länge, also die Anzahl der Zeilen des QTextEdit, zu beeinflussen?

Ich bekomme zwar die Daten schnell rein, aber nach 1 Sekunde interessieren sie mich kaum noch, und ich kann sie verwerfen. Wenn ich also sagen könnte, dass QTextEdit nur maximal 50 Zeilen haben soll, könnte es auch wieder schneller gehen....

Jemand eine Idee?
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

hinzufuegen vllt. per

Code: Alles auswählen

SomeQTextEdit.setPlainText( SomeQTextEdit.toPlainText().prepend( qstring_derdavorgehaengt_werden_soll ) );
... keine ahnung ob das schneller geht.

die max. zeilenanzahl kannst du afaik nicht angeben.
du koenntest hoechstens per

Code: Alles auswählen

SomeQTextEdit.setLineWrapMode( QTextEdit::FixedColumnWidth );
SomeQTextEdit.setLineWrapColumnOrWidth( max_anzahl_zeichen_pro_zeile );
die maximale zeichenanzahl pro zeile setzen.
dazu muesstest du nur wissen, wie breit dein qtextedit ist.

mfg,
julian
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Muss es denn scrollbar/markierbar sein bzw. brauchst du unbedingt RichText? Wahrscheinlich ist ein QLabel schneller, oder du machst dir ein eigenes Widget dass den Text dann selbst rendert, so kannst du auch die feste Zeilenzahl intern besser managen und lässt z.B. einen Zähler entscheiden, welche Zeile deines Arrays gerade oben angezeigt werden soll und welche Zeile neuen Text bekommen kann (Ich weiß nicht ob z.B. QList so intelligent ist, wenn der Speicher voll ist oben am Anfang neue Elemente reinzuschreiben die ja entfernt wurden, statt die Liste zu erweitern oder so..).

Übrigens: ein eigenes widget zu erstellen ist ganz leicht, einfach QWidget::paintEvent() und ggf. QWidget::resizeEvent überladen oder so, . Musst dann halt nur noch ne Stelle im Fenster finden, z.B. ein layout widget, wo du das dann einfügst...

MfG,
FaS
bw1faeh0
Beiträge: 94
Registriert: 10. Oktober 2007 14:48
Wohnort: Braunschweig

Beitrag von bw1faeh0 »

Ich markiere diesen Thread mal als gelöst und starte einen neuen, der hierauf aufbaut.
Antworten