Seite 1 von 1

Zeilenumbruch aus QDocument löschen

Verfasst: 4. März 2010 14:29
von Rumbert
Hallo,

ich habe in ein QDocument ein QString "Test\n".
Den QString "Test" kann ich löschen, aber den Zeilenumbruch finde ich nicht wieder...

Code: Alles auswählen

	QTextDocument* document = qtbMsgQueueOut->document();
	int numC = document->characterCount();
	QTextCursor cursor(document);
	cursor.movePosition(QTextCursor::Start,QTextCursor::MoveAnchor,1);
	cursor = document->find("Test");
	cursor.removeSelectedText(); // klappt wunder bar

	cursor.movePosition(QTextCursor::Start,QTextCursor::MoveAnchor,1);
	numC = document->characterCount(); // numC ist hier 2

	// keine der Varianten wird gefunden (cursor ist immer der Null-Cursor)
        cursor = document->find("\x0D\x0A");
        cursor = document->find("\n");
        cursor = document->find("\r");

	if (!cursor.isNull())
	{
		cursor.removeSelectedText();
        }
Wenn ich das, was übrig bleibt, in die Zwischenablage kopiere und bei PSPad einfüge sehe ich im Hexeditor, dass es sich um 0D 0A handelt. Aber wonach muss ich nun im document suchen, damit ich den Umbruch selektieren und löschen kann?

Grüße André

[falsches Forum]

Verfasst: 4. März 2010 15:29
von Rumbert
argh ins falsche unter-forum gepostet...

Kann man das Post irgendwie Verschieben?

Verfasst: 4. März 2010 17:29
von upsala
Innerhalb des QTextDocuments wird es keine Zeichen für Zeilenumbrüche geben, aber man ja auch ans Zeilenende/Anfang springen und dazwischen löschen.

Verfasst: 4. März 2010 17:57
von Rumbert
hm also die Zeilenübrüche sind da und bleiben als einziges über...
Wenn ich "Test" "Test" einfüge wird mit "TestTest" angezeigt.
Bei "Test\n" "Test\n" erhalte ich
"Test
Test
"
wenn ich wie beschrieben "Test" lösche bleibt:
"

"
übrig. Also zwei leere Zeilen die ich markieren kann und jeweils nur noch 0D 0A enthalten. Das QDocument ist in einem QTextBrowser eingebettet.
Ich muss doch irgendwie "dieses etwas" gezielt löschen können ohne Gefahr zu laufen in der Zeile noch was anderes als den Umbruch zu löschen.

Verfasst: 4. März 2010 19:21
von upsala

Code: Alles auswählen

QTextEdit *edit=new QTextEdit();
edit->show();
	
edit->setPlainText("Test\nTest\n");
	
QTextCursor c(edit->document());	
c.movePosition(QTextCursor::Start);
c.movePosition(QTextCursor::EndOfLine);
c.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
c.removeSelectedText();
	
qDebug() << edit->toPlainText();

Verfasst: 15. März 2010 18:15
von MisterIKS
Ich hoffe mal, es ist nicht nötig einen neuen Thread anzufangen.

Ich versuche gerade aus einem QTextEdit, in das ein Text mit Zeilenumbrüchen eingegeben wurde einen String zu machen, der statt Zeilenümbruchen nur mit einem Trennzeichen getrennte Text-Teile enthält. Mir schwebt z.B. vor, schreiben zu können:

Code: Alles auswählen

meinString.replace(ZEILENUMBRUCH,";");
Natürlich geht es so nicht, ich habe aber nirgends etwas dazu gefunden, sodass ich jetzt auf eure Hilfe hoffe.

Verfasst: 15. März 2010 18:34
von -=Freaky=-
machs doch so, wie es upsala schon gezeigt hat und fuege nach dem loeschen der zeilenumbrueche eben an der stelle dein trennzeichen ein?

mfg,
julian

Verfasst: 15. März 2010 18:47
von upsala
Warum sollte es so nicht gehen? Die Funktion gibt es doch, und deine Konstante hast du richtig vorbelegt, oder?

Verfasst: 15. März 2010 18:51
von MisterIKS
Das war nur eine Platzhalterkonstante um zu zeigen, was ich erreichen will, denn du mir sagen könntest, was die Kontante für einen Wert haben muss, damit Zeilenumbrüche entfert werden, wäre ich überglücklich :D

Was upsala geschrieben hat funktioniert bei mir, nur kommt immer, wenn alle ersetzt wurden ein Signal vom Betriebsystem, sobald ich zusätzlich c.insertText(";") mit in die Schleife schreibe.

Mit welcher Bedingung könnte ich denn eine Schleife, die das für den ganzen Text machen soll, beenden, wenn das Text-Ende erreicht wurde?

Verfasst: 15. März 2010 19:28
von MisterIKS
Ich meine, die Lösung zu haben, wobei ich nicht ganz verstehe, wieso.

Wenn ich

Code: Alles auswählen

QStringList zeilen(meinString.split("\n",QString::SkipEmptyParts));
benutze, werden mir die einzelnen Zeilen in die Liste geschrieben, ich verstehe nur nicht, wieso \n nicht im String auftaucht, wenn man ihn sich ausgeben lässt.

Verfasst: 15. März 2010 19:30
von MTW
Du könntest auch einen anderen Weg gehen und deinen String erstmal in eine Stringlist speichern, etwa so:

Code: Alles auswählen

QStringList stringList = string.split("\n") // den String an den Zeilenumbrüchen in Einzelstrings zerlegen
und dann wieder den String neu bauen, aus den Elementen in der QStringList und dazwischen ein ";" hängen...

ehhh MisterIKS, die Idee stammt von mir! :D :D :D

Verfasst: 15. März 2010 19:32
von MisterIKS
Da hab ichs doch glatt 2 Minuten früher selbst rausgefunden, trotzdem vielen Dank!