2009-03-11 2 views

Antwort

3

Ich bin ein großer Fan von Qt, aber ich hatte noch keine Gelegenheit, einen QTextEdit zu verwenden. Ich würde gerne helfen, also habe ich mir die Dokumentation angesehen.

Wenn Sie eine ausreichend aktuelle Version von Qt verwenden, sollten Sie feststellen, dass ein QTextEdit ein QTextDocument zugeordnet ist und es scheint, dass die Funktionalität, die Sie suchen, da sein kann. Ein QTextDocument ist eine Hierarchie von Frames und Blöcken. Ein Block entspricht einem Absatz, wie Sie oben erwähnt haben.

Die Dokumentation scheint anzuzeigen, dass Sie angeben können, dass Ihre Blöcke in einem Rahmen eingeschlossen werden. Dann sollten Sie in der Lage sein, ein Format für den Rahmen mit QTextFrame :: setFrameFormat festzulegen. In diesem Format können Sie eine Seitenumbruch-Richtlinie mithilfe einiger Flags angeben. Die angegebenen Flags sind PageBreak_Auto, PageBreak_AlwaysBefore und PageBreak_AlwaysAfter.

Es scheint mir, dass wenn Sie sowohl die PageBreak_AlwaysBefore und PageBreak_AlwaysAfter Flags für den Rahmen festlegen, sollten Ihre Blöcke zusammen bleiben.

Ich weiß, das ist eine ziemlich komplexe Serie. Ich hoffe, dass es hilft und würde gerne hören, ob es funktioniert.

+0

Funktioniert perfekt! Vielen Dank! Ich weiß nicht, wie ich es in der Dokumentation vermisse, ich schäme mich :) –

+0

Ich bin froh, dass es geklappt hat –

0

Das nächste was Sie haben, ist Unicode Paragraph Separator (U + 2029). Wenn Sie einen Textkörper mit Absatztrennzeichen umgeben, soll der Renderer nicht die erste Zeile oder die letzte Zeile des Absatzes auf einer Seite verlassen. Dieses Verhalten kann in MS-Word leicht beobachtet werden. Wenn der Text des Blocks jedoch vier Zeilen oder mehr beträgt, haben Sie keinen Empfänger, der alle vier Zeilen auf derselben Seite hat. Sie könnten 2-2 zwischen den Seiten teilen.

Das Konzept, von dem Sie sprechen, wird in einem kleineren Maßstab zwischen Wörtern und Zeilen verwendet. Wenn Sie einen NBSP-Wert (No-Break Space, U + 00A0) zwischen Wörtern anstelle eines normalen Bereichs eingeben, weiß der Renderer, dass die Zeile in diesem Bereich nicht unterbrochen werden darf.
Was Sie eigentlich suchen, ist ein "No-Page-Break Line-Feed". Leider hat Unicode kein solches Zeichen.

Sie können versuchen, den gesamten Textblock mit NBSPs anstelle von Leerzeichen zu schreiben. Schließlich wird Ihr einziger NBSP-Text größer als eine Zeile und er muss irgendwo zerbrechen. Dies ist ein bestimmter Endfall von Unicode, von dem ich nicht sicher bin, ob er wirklich definiert ist. Vielleicht besteht die Möglichkeit, dass der Zeilenumbruch, der erzeugt wird, so ist, dass er nicht zwischen den Seiten bricht. Dies ist sogar ein weiterer Endfall für den Endfall. Der einzige Weg zu wissen, was in dieser Situation passiert, ist zu versuchen.

+0

Sie haben Recht, aber ich weiß nicht, wie man in qt so etwas findet. Die andere Idee ist, die Länge des Dokuments zu messen und "\ f" zu verwenden, wenn die Größe in dem bestimmten Bereich liegt. –

+0

Intersting Info über Unicode, dass ich nicht bewusst war, danke. –

Verwandte Themen