View Full Version : Chat client QPixmap
sgu35
23rd April 2015, 18:18
Hello,
I would like to paint an avatar on a QTextEdit using a given QPixmap, before the pseudonym and the message.
The QTextEdit will be used to see conversations between 2 or more clients.
Here is the code in relation with the problem :
// On prépare le paquet à envoyer
QByteArray paquet;
QDataStream out(&paquet, QIODevice::WriteOnly);
QString messageAEnvoyer = "<strong>" + lineEditPseudo->text() +"</strong> : " + lineEditMessage->text();
out << (quint16) 0;// On écrit 0 au début du paquet pour réserver la place pour écrire la taille
out <<messageAEnvoyer;// On ajoute le message à la suite
out.device()->seek(0);// On se replace au début du paquet
out << (quint16) (paquet.size() - sizeof(quint16)); // On écrase le 0 qu'on avait réservé par la longueur du message
socket->write(paquet); // On envoie le paquet
Any help will be appreciated.
yeye_olive
23rd April 2015, 23:15
How is a snippet of code serializing a couple of strings and sending them through a socket relevant to your stated objective of painting a QPixmap on a QTextEdit? And, more importantly, what is your question?
sgu35
24th April 2015, 17:55
My question is how to draw a QPixmap into a QTextEDit.
yeye_olive
24th April 2015, 18:03
Get a cursor at the right position in the QTextEdit, and use QTextCursor::insertImage(). You will first need to register the image with the resource system.
sgu35
25th April 2015, 10:05
Hello,
I succeeded to draw the image at the right position with QTextCursor like this:
QDataStream in(socket);
if (tailleMessage==0)//Si on ne connaît pas encore la taille du message, on essaie de la récupérer
{
if (socket->bytesAvailable()<(int)sizeof(quint16))//On n'a pas reçu la taille du message en entier
return;
in>>tailleMessage;//Si on a reçu la taille du message en entier, on la récupère
}
//Si on connaît la taille du message, on vérifie si on a reçu le message en entier
if (socket->bytesAvailable()<tailleMessage)//Si on n'a pas encore tout reçu, on arrête la méthode
return;
//Si on arrive jusqu'à cette ligne, on peut récupérer le message entier
QString messageRecu;
in>>messageRecu;
QPixmap pixmap("puzzle.png");
QImage image(pixmap.toImage());
//On affiche le message sur la zone de Chat
QTextCursor textCursor=textEditListeMessages->textCursor();
textEditListeMessages->append("");//Pour le saut de ligne
textCursor.insertImage(image);//Colle l'avatar approprié
textCursor.insertHtml(messageRecu);
QPixmap pixmapbis;
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
pixmapbis.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
//On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
tailleMessage=0;
The point is that the tutorial (in openclassrooms) said that we had to use a QPixmap directly.
Thanks for your answer anyway.
Added after 6 minutes:
Sorry the code doesn't include the following lines :
QPixmap pixmapbis;
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
pixmapbis.save(&buffer, "PNG"); // writes pixmap into bytes in PNG format
So the correct code is :
QDataStream in(socket);
if (tailleMessage==0)//Si on ne connaît pas encore la taille du message, on essaie de la récupérer
{
if (socket->bytesAvailable()<(int)sizeof(quint16))//On n'a pas reçu la taille du message en entier
return;
in>>tailleMessage;//Si on a reçu la taille du message en entier, on la récupère
}
//Si on connaît la taille du message, on vérifie si on a reçu le message en entier
if (socket->bytesAvailable()<tailleMessage)//Si on n'a pas encore tout reçu, on arrête la méthode
return;
//Si on arrive jusqu'à cette ligne, on peut récupérer le message entier
QString messageRecu;
in>>messageRecu;
QPixmap pixmap("puzzle.png");
QImage image(pixmap.toImage());
//On affiche le message sur la zone de Chat
QTextCursor textCursor=textEditListeMessages->textCursor();
textEditListeMessages->append("");//Pour le saut de ligne
textCursor.insertImage(image);//Colle l'avatar approprié
textCursor.insertHtml(messageRecu);
//On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
tailleMessage=0;
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.