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é" 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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!
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