Bonjour a toutes et tous.

Je suis actuellement en train d'apprendre à me servir et à programmer avec Qt Creator. Je suis actuellement sur un TP pour la réalisation d'une application de tchat en réseaux (les tests sont pour l'instant fait en local en ouvrant plusieurs fenêtre client).

Je voudrais modifier mon tchat afin de pouvoir modifier la police (dans un premier temps) puis la couleur des messages que peuvent envoyer les clients. Problème: cette partie du TP n'est pas corrigé sur le tutoriel puisque ce fait parti des améliorations et je n'arrive pas à résoudre mon problème. Actuellement (et à défaut de pouvoir faire autrement), je n'arrive a changer la police du message que dans le QLineEdit mais lorsqu'il l'envoie et s'affiche sur l'écran de tchat cela revient à la police de base donc comment faire ?

J'ai essayé plusieurs combinaisons d'iddées sans succès donc je m'en remet à vous.

Voici les fichiers .ccp (en premier) et .h (en second)
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
164
165
166
167
 
 
#include "FenClient.h"
 
FenClient::FenClient()
{
    setupUi(this);
 
    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)));
 
    tailleMessage = 0;
 
    boutonEnvoyer->setEnabled(false);
}
 
 
// Tentative de connexion au serveur
void FenClient::on_boutonConnexion_clicked()
{
    // On annonce sur la fenêtre qu'on est en train de se connecter
    listeMessages->append(tr("<em>Tentative de connexion en cours...</em>"));
    boutonConnexion->setEnabled(false);
 
    socket->abort(); // On désactive les connexions précédentes s'il y en a
    socket->connectToHost(serveurIP->text(), serveurPort->value()); // On se connecte au serveur demandé
 
    listeMessages->setEnabled(true);
    boutonEnvoyer->setEnabled(true);
    boutonDeconnexion->setEnabled(true);;
}
 
// Tentative de deconnexion au serveur
void FenClient::on_boutonDeconnexion_clicked()
{
    deconnecte();
    listeMessages->setEnabled(false);
    boutonEnvoyer->setEnabled(false);
    boutonDeconnexion->setEnabled(false);
}
 
 
// Envoi d'un message au serveur
void FenClient::on_boutonEnvoyer_clicked()
{
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);
 
    // On prépare le paquet à envoyer
    QString messageAEnvoyer = tr("<strong>") + pseudo->text() +tr("</strong> : ") + message->text();
 
    out << (quint16) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint16) (paquet.size() - sizeof(quint16));
 
    socket->write(paquet); // On envoie le paquet
 
    message->clear(); // On vide la zone d'écriture du message
    message->setFocus(); // Et on remet le curseur à l'intérieur
}
 
 
// Appuyer sur la touche Entrée a le même effet que cliquer sur le bouton "Envoyer"
void FenClient::on_message_returnPressed()
{
    on_boutonEnvoyer_clicked();
}
 
 
// On a reçu un paquet (ou un sous-paquet)
void FenClient::donneesRecues()
{
    /* Même principe que lorsque le serveur reçoit un paquet :
    On essaie de récupérer la taille du message
    Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se basant sur la taille annoncée tailleMessage)
    */
    QDataStream in(socket);
 
    if (tailleMessage == 0)
    {
        if (socket->bytesAvailable() < (int)sizeof(quint16))
             return;
 
        in >> tailleMessage;
    }
 
    if (socket->bytesAvailable() < tailleMessage)
        return;
 
 
    // Si on arrive jusqu'à cette ligne, on peut récupérer le message entier
    QString messageRecu;
    in >> messageRecu;
 
    // On affiche le message sur la zone de Chat
    listeMessages->append(messageRecu);
 
    // On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
    tailleMessage = 0;
}
 
 
// Ce slot est appelé lorsque la connexion au serveur a réussi
void FenClient::connecte()
{
    listeMessages->append(tr("<em>Connexion réussie !</em>"));
    boutonConnexion->setEnabled(false);
}
 
 
// Ce slot est appelé lorsqu'on est déconnecté du serveur
void FenClient::deconnecte()
{
    socket->abort(); // On désactive les connexions précédentes s'il y en a
    listeMessages->append(tr("<em>Déconnecté du serveur</em>"));
    boutonConnexion->setEnabled(true);
 
}
 
 
// Ce slot est appelé lorsqu'il y a une erreur
void FenClient::erreurSocket(QAbstractSocket::SocketError erreur)
{
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
        case QAbstractSocket::HostNotFoundError:
            listeMessages->append(tr("<em>ERREUR : le serveur n'a pas pu être trouvé. Vérifiez l'IP et le port.</em>"));
            break;
        case QAbstractSocket::ConnectionRefusedError:
            listeMessages->append(tr("<em>ERREUR : le serveur a refusé la connexion. Vérifiez si le programme \"serveur\" a bien été lancé. Vérifiez aussi l'IP et le port.</em>"));
            break;
        case QAbstractSocket::RemoteHostClosedError:
            listeMessages->append(tr("<em>ERREUR : le serveur a coupé la connexion.</em>"));
            break;
        default:
            listeMessages->append(tr("<em>ERREUR : ") + socket->errorString() + tr("</em>"));
    }
 
    boutonConnexion->setEnabled(true);
}
 
 
void FenClient::on_boutonPolice_clicked()
{
    bool ok = false;
 
        QFont police = QFontDialog::getFont(&ok, boutonPolice->font(), boutonPolice, "");
 
        if (ok)
        {
            message->setFont(police);
        }
}
 
 
/*void FenClient::on_boutonCouleur_clicked()
{
    QColor couleur = QColorDialog::getColor(Qt::white, this);
 
    QPalette palette;
    palette.setColor(QPalette::ButtonText, couleur);
    boutonCouleur->setPalette(palette);
}*/
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
 
 
#ifndef FENCLIENT_H
#define FENCLIENT_H
 
#include <QtGui>
#include <QtNetwork>
#include <QFontDialog>
#include "ui_FenClient.h"
 
 
class FenClient : public QWidget, private Ui::FenClient
{
    Q_OBJECT
 
    public:
        FenClient();
 
    private slots:
        void on_boutonConnexion_clicked();
        void on_boutonDeconnexion_clicked();
        void on_boutonEnvoyer_clicked();
        void on_message_returnPressed();
        void on_boutonPolice_clicked();
        void on_boutonCouleur_clicked();
        void donneesRecues();
        void connecte();
        void deconnecte();
        void erreurSocket(QAbstractSocket::SocketError erreur);
 
    private:
        QTcpSocket *socket; // Représente le serveur
        quint16 tailleMessage;
};
 
#endif // FENCLIENT_H

Par rapport à l'interface fait avec Qt Designer, voici quelques infos qui pourraient être utile pour la résolution de mon problème:

la fenêtre principale du tchat où s'affiche la conversation: listeMessages
le QlineEdit où le client tape son message: message
le QlineEdit où le client tape son pseudo: pseudo
le pushButton pour le changement de police: boutonPolice


J'espère que vous pourrez m'aider avec mon problème. Et pour la modification de la couleur du message si quelqu'un me donne la solution je suis preneur sinon je pense que cela doit avoir le même fonctionnement que pour la police donc je pourrais m'en inspirer

Cordialement,
Clairetj