IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Manip QLine-Edit / QString

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut Manip QLine-Edit / QString
    Bonjour à tous!
    Voici mon problème : je n'arrive pas à faire en sorte que chaque lettre écrite dans une QLineEdit soit
    1) instantanément remplacée dans la QLine Edit par les lettres successives d'une QString donnée
    2 ) également stockée dans une autre QString.

    En formel, l'écriture d'une phrase1 dans une QLine 1, entrainerait l'enregistrement de cette phrase1 dans une QLine2, et l'écriture "lettre par lettre" d'une QString donnée dans la QLine 1.

    En espérant que ce soit clair et que quelqu'un puisse m'aider, ce serait génial.
    Merci d'avance!
    (j'utilise Qt Creator)

    Hydilas

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Je suis désolé j'ai rien compris. Après j'ai peut etre du mal le samdi en fin d'aprem...
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Il te faut connecter un slot au signal textEdited (utilise bien celui-ci et non textChanged car est émis lors d'un appel à setText, chose que tu vas faire dans ton slot). A partir de l'argument qui t'es fourni, tu connais le nombre de lettres entrées, et donc le nombre de lettres du mot dont tu veux forcer l'écriture. Un petit setText ensuite et c'est réglé.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut Précisement
    Salut et merci pour ta réponse IrmatDen.
    Je crois que je saisis quelquechose mais pourrais-tu m'expliciter un peu ça, car je débute et tout n'est pas encore bien fixé dans la compréhension du langage ou plutôt de l'explication du langage

    Pour superjaja : j'essaye de réexpliquer car je conçois que ce soit dur, surtout un samedi fin daprem, tu l'as dit ...

    En fait il s'agirait simplement de faire en sorte qu'en écrivant une phrase dans une QLineEdit, ce ne soit pas ce qui est réellement écrit qui s'affiche, mais le contenu d'une QString donnée. Ce qui est réellement tapé sur le clavier sera seulement enregistré dans une autre QString.
    Par exemple, j'écris "Robert" dans une QLineEdit1. Mais il s'affiche en fait "Pamela", quoi que j'écrive. Dans cet exemple, j'aurai tapé "R", il se sera affiché "P", puis "o" -> "a", "b" -> "m", etc... Dans le même temps, "Robert" sera stocké dans une autre QString.

    J'espère que c'est plus clair.
    Merci d'avance de m'aider encore a little bit!

    Tchou

  5. #5
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Je ne vais pas te donner la réponse directe, mais te donner un petit cas afin que tu puisses chercher à comprendre.

    * L'utilisateur veut entrer le mot "Alpha"
    * La machine va faire apparaître "Gamma"
    * On sauvegarde la saisie dans la variable QString userStr

    1. Saisie de "A" (donc déclenchement du signal textEdited donc passage dans ton slot)
    => on voit que la longueur du texte est 1
    => On ajoute la dernière lettre (donc "A") à userStr
    => On prend la première lettre de "Gamma", et on l'affiche
    => Le texte affiché et donc "G"
    => userStr == "A"
    2. Saisie de "l"
    => on voit que la longueur du texte est 2 (le texte est maintenant "Gl"
    => On ajoute la dernière lettre (donc "l") à userStr
    => On prend les 2 premières lettres de "Gamma", et on les affiche
    => Le texte affiché et donc "Ga"
    => userStr == "Al"
    3. Saisie de "p"
    => on voit que la longueur du texte est 3 (le texte est maintenant "Gap"
    => On ajoute la dernière lettre (donc "p") à userStr
    => On prend les 3 premières lettres de "Gamma", et on les affiche
    => Le texte affiché et donc "Gam"
    => userStr == "Alp"
    4. Saisie de "h"
    => on voit que la longueur du texte est 4 (le texte est maintenant "Gamh"
    => On ajoute la dernière lettre (donc "h") à userStr
    => On prend les 4 premières lettres de "Gamma", et on les affiche
    => Le texte affiché et donc "Gamm"
    => userStr == "Alph"
    5. Saisie de "h"
    => on voit que la longueur du texte est 5 (le texte est maintenant "Gamma"
    => On ajoute la dernière lettre (donc "a") à userStr
    => On prend les 5 premières lettres de "Gamma", et on les affiche
    => Le texte affiché et donc "Gamma"
    => userStr == "Alpha"

    Est-ce que tu vois mieux le pattern ainsi décrit ?

  6. #6
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Voilà un exemple de comment cela fonctionne.
    J'avais pas vu le post d'IrmatDen quand j'ai fait le prog donc je sais pas si j'ai suivi le meme pattern. Ce n'est pas quelque chose de fini il faut prendre en compte certain cas mais ça c'est a toi de gérer après. Je te donne deja le fonctionnement et le mise en place avec les signaux et slot et un debut d'algo.

    Bon courage pour la suite.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include <QtGui>
    #include <QtGui/QApplication>
     
    class View : public QWidget
    {
    	Q_OBJECT
     
    private:
    	//Variables membres
    	QString m_Pamela;
    	QLineEdit* m_line;
    	QString m_saveLine;
     
    public:
    	View()
    	{
    		//Initialisation des differents controles
    		m_line = new QLineEdit(this);
    		//Initialisation de la QString 
    		m_Pamela = "Pamela";
    		//On connecte le signal textEdited de note QLineEdit avec notre slot EditNew
    		connect(m_line,SIGNAL(textEdited(const QString&)),this,SLOT(EditNew(const QString &)));
     
    	}
     
    protected slots :
    	void EditNew(const QString & text) 
    	{	
    		//on recupere la taille de la chaine
    		int num = text.length();
    		//On recupere le denier caracter entrer
    		QString newText = m_Pamela.left(num);
    		//On sauvegarde ce qu'a entrer l'utilisateur et on concataine avec ce qu'il a entrer precedement
    		m_saveLine = m_saveLine + text.right(1);
    		//On met a jour l'edit
    		m_line->setText(newText);
    		//On remet la variable de sauvegarde vide si l'utilisateur efface tout les caracteres.
    		if( num < 1)
    			m_saveLine="";
     
     
    	}
     
    };
     
    #include "main.moc"
     
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	View w;
    	w.show();
    	return a.exec();
    }
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  7. #7
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    C'est ça, sauf que là tu lui donnes la solution et il n'a plus qu'à copier/coller sans réfléchir...

  8. #8
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    C'est mon cadeau d'arrivée sur le forum.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut Réponse
    Merci beaucoup à vous deux pour vos réponses, c'est vraiment cool.

    Je tiens juste à te rassurer IrmatDen, je ne suis absolument pas du genre à copier sans rien comprendre, et ce n'était pas mon but en venant poster un message ici. Même si c'est vrai que superjaja a communiqué la réponse précise, ça n'empeche pas que je cherche à comprendre chaque ligne et à réecrire ce code seul ensuite.
    Dailleurs, il y a deux lignes que je ne comprend pas

    QLineEdit* m_line;
    .
    Ici, la QLineEdit se nomme m_line, c'est bien ça? Le signe * me fait me mélanger tout le temps entre les références, les pointeurs....
    Disons qu'avec Qt, je crée directement graphiquement ma QLine et je la nomme m_line, cela revient au même isn't it? Exactement comme la ligne
    connect(m_line,SIGNAL(textEdited(const QString&)),this,SLOT(EditNew(const QString &)));
    . Je fais cela par Qt.

    Et voici la deuxième ligne que je ne comprend pas :
    m_line = new QLineEdit(this);
    La notion de "this" me pose problème. Que cherche t-on à faire ici?

    Merci d'avance de vos réponses, je ne suis plus loin de la compréhension aprés quelques minutes de réflexion héhé.

    Salut!

  10. #10
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    QLineEdit* m_line;
    C'est un pointeur sur une QlineEdit. Normalement si tu utilises un designer ce code est générer automatiquement et tu peux le voir dans le fichier source correspondant a ton fichier ui.

    connect(m_line,SIGNAL(textEdited(const QString&)),this,SLOT(EditNew(const QString &)));
    Ca aussi tu peux le faire directement a partir du designer et voir le code génerer.

    m_line = new QLineEdit(this);
    this correspond au parent de la QlineEdit c'est a dire dans mon cas la classe contenant la QlineEdit (View).

    Je te conseille de lire une mimimum la doc Qt ici la faq Qt et les tutoriels de base ici et normalement tu devrais comprendre tout ça qui sont les bases de Qt. Si tu as encore des questions sur le fontionnement de Qt n'hesite pas le forum est fait pour ça.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  11. #11
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut Thanks !
    Merci beaucoup à tous les deux,
    C'est vraiment trés sympa,

    Ce genre de forum actif est vraiment génial.
    A plus tard donc.

    Et bonne continuation!

    Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Manip de fichiers] Fonction retournant des infos
    Par sans_atouts dans le forum C
    Réponses: 3
    Dernier message: 24/07/2002, 14h16
  2. Hint et edit.enbled
    Par Invité dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/07/2002, 09h26
  3. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09
  4. Image et rich edit
    Par :GREG: dans le forum C++Builder
    Réponses: 2
    Dernier message: 13/05/2002, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo