2009-03-11 5 views
1

J'ai un document QTextEdit dont la taille est différente à chaque impression. Au milieu du document, j'ai quelques blocs de texte qui sont inséparables aux yeux de l'utilisateur et je dois protéger mes blocs contre le fractionnement sur deux pages au cas où le document serait de taille équivalente. Avez-vous une solution?Comment conserver ensemble peu de blocs de texte inséparables dans QTextEdit à la fin de la page actuelle (tout jeter sur la page suivante)?

Répondre

3

Je suis un grand fan de Qt mais je n'ai pas encore eu l'occasion d'utiliser un QTextEdit. Je voudrais aider cependant j'ai jeté un coup d'oeil à travers la documentation.

Si vous utilisez une version suffisamment récente de Qt, vous devriez trouver qu'un QTextEdit a un QTextDocument associé et il semblerait que la fonctionnalité que vous recherchez soit là. Un QTextDocument est une hiérarchie de cadres et de blocs. Un bloc est équivalent à un paragraphe comme vous l'avez mentionné ci-dessus.

La documentation semble indiquer que vous pourriez spécifier que vos blocs soient enveloppés dans un cadre. Ensuite, vous devriez pouvoir définir un format pour le cadre en utilisant QTextFrame :: setFrameFormat. Ce format vous permettra de spécifier une politique de saut de page en utilisant certains drapeaux. Les indicateurs spécifiés sont PageBreak_Auto, PageBreak_AlwaysBefore et PageBreak_AlwaysAfter.

Il me semble que si vous définissez à la fois les drapeaux PageBreak_AlwaysBefore et PageBreak_AlwaysAfter pour le cadre, alors vos blocs doivent rester ensemble. Je réalise qu'il s'agit d'une série relativement complexe. J'espère que cela aide et aimerait vraiment entendre si cela fonctionne.

+0

Fonctionne parfaitement! Je vous remercie! Je ne sais pas comment je l'ai manqué dans la documentation, j'ai honte :) –

+0

Je suis content que ça a marché –

0

La chose la plus proche de quelque chose qui fait cela est le séparateur de paragraphes Unicode (U + 2029). Si vous entourez un corps de texte avec des séparateurs de paragraphes, alors le moteur de rendu n'est pas censé laisser seul la première ligne ou la dernière ligne du paragraphe dans une page. Ce comportement peut être facilement observé dans MS-Word. Si toutefois le texte du bloc est quatre lignes ou plus alors vous n'avez pas un bénéficiaire que les quatre lignes seront dans la même page. ils pourraient diviser 2-2 entre les pages.

Le concept dont vous parlez est largement utilisé à plus petite échelle entre les mots et les lignes. Si vous placez un NBSP (No-Break Space, U + 00A0) entre les mots au lieu d'un espace normal, le moteur de rendu sait que la ligne ne doit pas être rompue dans cet espace.
Ce que vous recherchez est un "saut de ligne sans saut de page". Malheureusement Unicode n'a pas un tel personnage.

Ce que vous pouvez essayer est d'écrire tout le bloc de texte en utilisant des NBSP à la place des espaces. Finalement, votre seul texte NBSP va devenir plus grand qu'une ligne et il devra casser quelque part. C'est un certain cas d'Unicode dont je ne suis pas sûr qu'il soit vraiment défini. Il y a peut-être une chance que le saut de ligne qui sera généré soit tel qu'il ne se casse pas entre les pages. Ceci est même une autre fin de l'affaire. La seule façon de savoir ce qui se passe dans cette situation est d'essayer.

+0

Vous avez raison, mais je ne sais pas comment trouver qch comme ça en qt. L'autre idée est de mesurer la longueur du document et d'utiliser "\ f" si la taille est dans la plage particulière. –

+0

Infos intéressantes sur l'Unicode que je ne connaissais pas, merci. –

Questions connexes