Précédent   Forum du club des développeurs et IT Pro > C et C++ > Bibliothèques > Qt > EDI > Qt Creator
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 25/03/2012, 15h08   #1
lodacom
Candidat au titre de Membre du Club
 
Homme Olivier Duplouy
Étudiant
Inscription : mars 2009
Messages : 43
Détails du profil
Informations personnelles :
Nom : Homme Olivier Duplouy
Âge : 23
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mars 2009
Messages : 43
Points : 14
Points : 14
Envoyer un message via MSN à lodacom
Par défaut 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é" 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!
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
lodacom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 14h28.


 
 
 
 
Partenaires

Hébergement Web