Problème de mise à jour d'une QStringList pour un QCompleter
Voilà je crois que tout est à peu prêt dis dans mon titre. En résumé j'ai une classe que j'ai appelé "completion" (que j'ai mise dans mes Contrôleurs). Je l'ai "adapté":zoubi: de l'exemple de Qt (Custom Completer) avec mes ressources propre (PHP.txt...). J'ai donc modifié mon MainWindows en conséquence (qui est dans mes vues).
Le problème est que je veux rajouter un QStringListModel de ma construction.
Que je construit grâce à une classe que j'ai appelée "PhpDico" (qui est dans mes modèles). Celle-ci construit une QStringList à partir d'une Regex. Voici son code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
/*PhpDico.cpp*/
#include "PhpData.h"
#include "PhpDico.h"
PhpDico::PhpDico(QTextDocument *parent)
{
curentFile=parent;//on récupère le texte ouvert courant (editor->document())
}
PhpDico::~PhpDico()
{
}
QStringList PhpDico::searchInFile()
{
QRegExp rx=PhpData::idRegex;//on cherche tous les mots correspondant à la regex
QString text=curentFile->toPlainText();//on transforme le fichier courant en QString
int pos = rx.indexIn(text);
listVar = rx.capturedTexts();//on applique la regex au texte et on récupère une QStringList
listVar.removeDuplicates();//on enlève les doublons
return listVar;//on la renvoie
} |
avec son .h correspondant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <QStringList>
#include <QString>
#include <QTextDocument>
#ifndef PHPDICO_H
#define PHPDICO_H
class PhpDico
{
private:
QStringList listVar;
QTextDocument *curentFile;
public:
PhpDico(QTextDocument *parent);
virtual ~PhpDico();
virtual QStringList searchInFile();
};
#endif // PHPDICO_H |
Je récupère donc cette QStringList en faisant ceci (dans mon MainWindows):
Code:
1 2 3 4 5 6 7 8
|
QStringListModel MainWindow::updateListVar()
{
QStringList list_var;
PhpDico *essai=new PhpDico(editor->document());
list_var=essai->searchInFile();
return new QStringListModel(list_var,completer);
} |
Le problème est que je voudrais mettre à jour mon QStringListModel à chaque fois que l'utilisateur fait un espace (par exemple) et que mon compléteur le prenne en compte et pour pouvoir proposer à l'utilisateur toutes les variables présentent dans le fichier (ma regex repère toutes les variables de types PHP).
J'ai essayé de le faire en détectant un keyPressEvent dans mon updateListVar et complété mon modèle. Mais ça me fait un magnifique crash de ma fenêtre!:cry:
J'ai consulté le forum, un sujet aborde ce problème (QLineEdit auto-complétion via QCompleter modele MVC) mais c'est pour un QLineEdit (j'ai un QTextEdit) et je ne pense que cela vienne du fait que je ne détruise pas mon modèle à chaque fois et que je le reconstruise après avoir détecter un événement espace (à moins que...).
Merci d'avance pour votre aide ;)