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

Qt Discussion :

problème avec QTextEdit


Sujet :

Qt

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut problème avec QTextEdit
    salut tout le monde, je suis entrain de développer un programme de chat avec QT, mon problème c'est lorsque le message est envoyé il ne s'affiche pas dans le champ de texte mais par contre il s'affiche dans une boite de dialogue. et je crois que le code ressemble au programme de chat.
    voici le slot qui s'occupe de recevoir le message :
    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
     
    void room::donneesRecues()
    {
        QTcpSocket *server = qobject_cast<QTcpSocket *>(sender());
        if (server == 0) 
            return;
     
        QDataStream in(server);
     
        if (tailleMessage == 0) 
        {
            if (server->bytesAvailable() < (int)sizeof(quint16)) 
                 return;
     
            in >> tailleMessage; 
        }
     
        if (server->bytesAvailable() < tailleMessage) 
            return;
     
        QString message;
        in >> message;
        champ_recu->append(message); // ici ça marche pas 
        QMessageBox::information(this,"",message); // par contre ici oui le message s'affiche
        tailleMessage = 0;
    }
    merci de m'aider

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Tu est sur de la valeur de champ_recu??

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    merci de me repondre, mais j'ai pas bien compris ta question, bon champ_recu est un champ texte que j'ai ajouté sous QtDesign, lorsque j'insère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ_recu->append("quelque chose");
    dans le constructeur ça marche sans problème.

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par white_fire Voir le message
    merci de me repondre, mais j'ai pas bien compris ta question,
    dit autrement, est tu sur que champ_recu est bien initialisé?

    Citation Envoyé par white_fire Voir le message
    champ_recu est un champ texte que j'ai ajouté sous QtDesign, lorsque j'insère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ_recu->append("quelque chose");
    dans le constructeur ça marche sans problème.
    Tu n'aurais pas écrit un truc du genre dans ton constructeur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QTextEdit * champ_recu = new QTextEdit
    si tu met champ_recu->append("quelque chose"); au lieu de champ_recu->append(message); ca donne quoi?

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    non effectivement j'ai pas initialisé champ_recu, mais pourquoi je vais l'initialiser puisque l'interface et les champs nécessaire sont déjà créés dans QtDesign.
    si je remplace message par du texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ_recu->append("texte");
    ça change rien, mais si je deplace l'instruction dans le constructeur ça donne.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par white_fire Voir le message
    non effectivement j'ai pas initialisé champ_recu, mais pourquoi je vais l'initialiser puisque l'interface et les champs nécessaire sont déjà créés dans QtDesign.
    si je remplace message par du texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    champ_recu->append("texte");
    ça change rien, mais si je deplace l'instruction dans le constructeur ça donne.
    peut tu mettre le code du constructeur?

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    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
     
    room::room(QMainWindow *parent) : QMainWindow(parent)
    {
        setFixedSize(381,356);
        setupUi(this);
     
        envoyer->setEnabled(false);
     
                                            /***************************Socket Client*************************/
     
        socket = new QTcpSocket(this);
        connect(socket, SIGNAL(readyRead()), this, SLOT(donnees()));
        connect(socket, SIGNAL(connected()), this, SLOT(connect()));
        connect(socket, SIGNAL(disconnected()), this, SLOT(deconnecte()));
        connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(erreurSocket(QAbstractSocket::SocketError)));
     
        tailleMessage2 = 0;
     
        socket->abort(); 
        socket->connectToHost("192.168.0.2", 50500);
    }

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    j'ai plus beaucoup d'idée...
    Es que tu pourrais montrer tout le code de room?

    vérifie que tu ne fait pas une erreur mémoire quelque part.

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Par défaut
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
     
    #include <QtGui>
    #include <QWidget>
    #include <QPushButton>
    #include <QFont>
    #include <QPalette>
    #include <QColor>
    #include <QtNetwork>
    #include "room.h"
     
    room::room(QMainWindow *parent) : QMainWindow(parent)
    {
        setFixedSize(381,356);
        setupUi(this);
     
        envoyer->setEnabled(false);
     
                                            /***************************Socket Client*************************/
     
        socket = new QTcpSocket(this);
        connect(socket, SIGNAL(readyRead()), this, SLOT(donneesRecues()));
        connect(socket, SIGNAL(connected()), this, SLOT(connecte()));
        connect(socket, SIGNAL(disconnected()), this, SLOT(deconnecte()));
        connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(erreurSocket(QAbstractSocket::SocketError)));
     
        tailleMessage2 = 0;
     
        socket->abort(); 
        socket->connectToHost("192.168.0.2", 50500);
    }
     void room::on_police_clicked()
     {
         bool ok = false;
         QFont policy = QFontDialog::getFont(&ok,champ_env->font(),this,"Choisir votre police");
     
         if (ok)
         {
             champ_env->setFont(policy);
         }
     }
    void room::on_couleur_clicked()
    {
        QColor coul = QColorDialog::getColor(Qt::black, this);
        QPalette palette;
        palette.setColor(QPalette::Normal,QPalette::Text, coul);
        champ_env->setPalette(palette);
    }
    void room::on_actionModifier_la_police_triggered()
    {
         bool ok = false;
         QFont policy = QFontDialog::getFont(&ok,champ_env->font(),this,"Choisir votre police");
     
         if (ok)
         {
             champ_env->setFont(policy);
         }
    }
     
    void room::setIp(QString ip)
    {
        label_cache->setText(ip);
        setVar(ip);
        label_cache->clear();
    }
     
    void room::setVar(QString pi)
    {
         intpro = pi;
    }
     
    void room::nouvelleConnexion()
    {
        QTcpSocket *nouveauClient = server->nextPendingConnection();
        clients << nouveauClient;
     
        connect(nouveauClient, SIGNAL(readyRead()), this, SLOT(donneesRecues()));
        connect(nouveauClient, SIGNAL(disconnected()), this, SLOT(deconnexionClient()));
    }
     
    void room::donneesRecues()
    {
        QTcpSocket *server = qobject_cast<QTcpSocket *>(sender());
        if (server == 0) 
            return;
     
     
        QDataStream in(server);
     
        if (tailleMessage == 0) 
            if (server->bytesAvailable() < (int)sizeof(quint16)) 
                 return;
     
            in >> tailleMessage; 
        }
     
     
        if (server->bytesAvailable() < tailleMessage) 
            return;
     
        QString message;
        in >> message;
        setMsg(message); ///ici c'est mon probleme
        QMessageBox::information(this,"",message); //pourquoi ici ca marche?
        tailleMessage = 0;
    }
    void room::deconnexionClient()
    {
     
        QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
        if (socket == 0)  
            return;
        clients.removeOne(socket);
        socket->deleteLater();
    }
     
    void room::on_envoyer_clicked()
    {
        QByteArray paquet;
        QDataStream out(&paquet, QIODevice::WriteOnly);
     
     
        QString messageAEnvoyer = champ_env->toPlainText();
     
        out << (quint16) 0;
        out << messageAEnvoyer;
        out.device()->seek(0);
        out << (quint16) (paquet.size() - sizeof(quint16));
     
        socket->write(paquet); 
        champ_env->clear(); 
        champ_env->setFocus(); 
    }
     
    void room::connecte()
    {
        envoyer->setEnabled(true);
    }
     
    void room::on_champ_env_returnPressed()
    {
        on_envoyer_clicked();
    }
     
    void room::connexionServeur()
    {
        server = new QTcpServer(this);
     
        if (!server->listen(QHostAddress::Any, 50500)) /// Démarrage du serveur sur toutes les IP disponibles et sur le port 50585
        {
     
            QMessageBox::information(this,"","Le serveur n'a pas pu être démarré. Raison : " + server->errorString());
        }
        else
        {
            connect(server, SIGNAL(newConnection()), this, SLOT(nouvelleConnexion()));
        }
        tailleMessage = 0;
    }
     
    void room::setMsg(QString m)
    {
        champ_recu->setText(m);
    }
    j'ai modifier un petit peux le code, j'ai ajouté une fonction setMsg au lieu de champ_recu.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    ton code semble correcte.

    As tu essayer de fair un make clean?

    tu devrais faire du pas à pas et vérifier que la valeur du pointeur champ_recu ne soit pas modifié au cour du temps, et voir si tu n'utilise pas quelque part un pointeur non initialisé.

    En debug, vérifie que tu n'as pas de warning sur la console.
    Sous windows, il suffit de rajouter
    CONFIG += console
    dans le .pro

    Pour bien te former pense à lire les cours et tutoriels pour apprendre Qt et la FAQ Qt.

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

Discussions similaires

  1. QTextEdit + Html: Problème avec la balise <hr/>
    Par LittleWhite dans le forum Qt
    Réponses: 6
    Dernier message: 06/09/2009, 16h01
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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