ich bin recht neu hier und auch recht neu bei der Qt entwicklung - ist mein erstes Projekt mit Qt. Daher kommen so die ein oder anderen Fragen.
Ich bekomme über den Seriellen Port Ausgaben eines Terminals herein (bsp. Bootender Linux-Kernel). Diese Ausgaben möchte ich innerhalb meiner Anwendung darstellen. Damit die ganzen Positionierungen funktionieren, sollte ich zumindest die ein oder anderen Terminal-Befehle abfangen und behandeln.
Zur Ausgabe selber habe ich ein QTextEdit genommen. Funktioniert auch soweit. Wichtig sind vor allem Steuer-Chars wie 0x08 (backspace), 0x0d (carriage return) oder 0x0a (new line).
Jetzt gibt es den Fall, das eine Anwendung mir über die serielle schnitstelle einen Countdown ausgibt und bevor die Zahl geschrieben wird 3x 0x08 mitschickt damit der Cursor zur Ausgabe positioniert und die vorherige Zahl überschrieben wird. Also speicher ich mir einfach die letzte Zeile im QTextEdit, entferne sie, überschreibe das entsprechende Zeichen und füge die Zeile wieder ein. Der code sieht folgender maßen aus:
Code: Alles auswählen
int curParagraph = edit->paragraphs() - 1;
int curParagraphPos = edit->paragraphLength(curParagraph);
bool delLastLine = false;
string termBuf;
size_t insPos = 0;
// War die letzte Zeile mit einem \n abgeschloßen (wenn ja ist curParagraphPos = 0).
if (curParagraphPos > 0)
{
termBuf = edit->text(curParagraph).ascii();
termBuf.erase(termBuf.end() - 1 ); // Es wird ein Leerzeichen zu viel geliefert.
insPos = termBuf.size();
delLastLine = true;
}
Code: Alles auswählen
if (delLastLine)
{
delLastLine = false;
edit->setSelection(curParagraph, 0, curParagraph, curParagraphPos);
edit->removeSelectedText();
}
edit->insertAt(termBuf, curParagraph, 0);
Was natürlich noch besser wäre: gibt es ggf. Widgets für Qt, welche bereits ein Terminal emulatieren, so daß ich den Text nur noch direkt zuweisen muß. Dann könnte ich nämlich auch die ANSI steuersequenzen verwenden.
Ich verwende übrigens Qt3 unter Linux.
Thnx
Marc