Seite 1 von 1

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

Verfasst: 23. Oktober 2007 13:51
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

Verfasst: 23. Oktober 2007 14:16
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?

Verfasst: 23. Oktober 2007 14:25
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

Verfasst: 23. Oktober 2007 14:35
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 :(

Verfasst: 23. Oktober 2007 14:50
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?

Verfasst: 23. Oktober 2007 15:38
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

Verfasst: 23. Oktober 2007 15:53
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

Verfasst: 24. Oktober 2007 08:40
von bw1faeh0
Ich markiere diesen Thread mal als gelöst und starte einen neuen, der hierauf aufbaut.