2010-09-24 3 views
1

J'ai travaillé avec QGraphicsTextItem. J'ai actuellement l'exposé dans une scène, chacun représentant une page physique du texte. En ce moment je surcharge la fonction keyReleaseEvent pour redistribuer le texte tapé sur toutes les pages. Le problème avec cela est que lorsque je définis le texte avec setPlainText, le curseur revient au début du textitem qui est défini comme élément de mise au point pour la scène. Comme vous pouvez l'imaginer, cela est problématique lors de la frappe, en particulier sur une autre page au lieu de la mise au point, cela rend également les raccourcis clavier pour couper et copier ne fonctionnent pas du tout.Mise à jour d'un QGraphicsTextItem lors d'un changement de texte

Y at-il un moyen de définir le texte d'un QGraphicsTextItem sans réinitialiser le curseur/déplacer le curseur?

Répondre

3

Pour votre problème, il y a une façon dont je vois que vous pourriez le réparer, mais je ne suis pas sûr que ce soit le meilleur. Le voici:

Vous pouvez appeler textCursor() sur votre QGraphicsTextItem pour obtenir le QTextCursor de votre QGraphicsTextItem. Avec ce curseur, vous pouvez avoir sa position en appelant position(). Conservez ensuite cette valeur, mettez à jour le texte, puis définissez la position du curseur en créant un nouveau QTextCursor, en définissant sa position avec setPosition(int pos, MoveMode m = MoveAnchor).

J'espère que cela aide.

EDIT pour ajouter par exemple:

// graphicsTextItem is of type QGraphicsTextItem* 

QTextCursor cursor = graphicsTextItem->textCursor; 
int startPosition = cursor.position(); 

// Do all you need to update your text. 

QTextCursor afterCursor; 
afterCursor.setPosition(startPosition); 

graphicsTextItem->setTextCursor(afterCursor); 

Je n'ai pas testé, je l'ai écrit la façon dont je pensais qu'il allait travailler.

Questions connexes