Bonjour,
Dans le cadre d'un projet personnel j'ai fait une interface GUI et donc je suis passé par les champs texte!
Seulement on doit afficher ligne par ligne (forcément) donc c'est pratique de pouvoir accéder facilement aux différentes lignes. Puis l'utilisateur pourrait (dans certains cas) écrire au milieu du texte, ou alors par exemple dans le cas d'un client contenant un chat connecté à un serveur, les lignes les plus anciennes seraient effacées régulièrement (pour éviter de consommer trop de mémoire, on ne conserverait que les 1000 dernières lignes de chat).
De plus on pourrait imaginer faire un éditeur de script (qui peuvent être très longs) avec cette interface
Donc voilà je m'intéresse au différentes solutions qui permettraient de mettre ça en place.
Pour l'instant j'ai la solution "naïve":
Cette solution n'est pas vraiment bien parce qu'en cas d'insertion/suppression de caractères les std::string font des tonnes de recopiages.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class MF_Texte { public/private: ... /* un vecteur pour donner les pos des lignes (début et fin) */ std::vector<xy> poslignes; /* Le texte en lui-même */ std::string texte; };
Donc je pensais faire à la place quelque chose du style:
Je trouve la solution assez satisfaisante même si en cas de décalage de ligne le vector se réécrit totalement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 class MF_Texte { public/private: ... /* Le texte en lui-même -- découpé en différente lignes*/ std::list<std::string> lignes; /* un vecteur pour accéder aux différentes lignes Il contient des itérateurs de la liste lignes (enfin des références vers ces itérateurs */ std::vector<std::list<string>::iterator *> accesseur; };
Mais bon, des tonnes d'applications utilisent une interface GUI, ça a dû être optimisé et donc j'aimerais savoir s'il existe de meilleures implémentations en C++ ou avoir des conseils(oui je suis un feignant je n'ai pas envie d'aller voir la source de WxWidgets tout de suite
)
Merci![]()
Partager