Zeilenumbruch aus QDocument löschen

Code-Schnippsel, oder Tipps und Tricks, die einem beim Programmieren mit Qt helfen können.
Antworten
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Zeilenumbruch aus QDocument löschen

Beitrag 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é
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

[falsches Forum]

Beitrag von Rumbert »

argh ins falsche unter-forum gepostet...

Kann man das Post irgendwie Verschieben?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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();
MisterIKS
Beiträge: 10
Registriert: 5. Februar 2010 17:46
Kontaktdaten:

Beitrag 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.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Warum sollte es so nicht gehen? Die Funktion gibt es doch, und deine Konstante hast du richtig vorbelegt, oder?
MisterIKS
Beiträge: 10
Registriert: 5. Februar 2010 17:46
Kontaktdaten:

Beitrag 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?
MisterIKS
Beiträge: 10
Registriert: 5. Februar 2010 17:46
Kontaktdaten:

Beitrag 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.
MTW
Beiträge: 20
Registriert: 24. Juni 2008 18:26
Wohnort: Vaihingen/Enz
Kontaktdaten:

Beitrag 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
MisterIKS
Beiträge: 10
Registriert: 5. Februar 2010 17:46
Kontaktdaten:

Beitrag von MisterIKS »

Da hab ichs doch glatt 2 Minuten früher selbst rausgefunden, trotzdem vielen Dank!
Antworten