Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec la fonction value() de QSpinBox

Sujet résolu
    15 juin 2019 à 0:53:25

    Bonjour, est-ce que quelqu'un saurait il quelque chose sur mon problème : un message d'avertissement  s'affiche quand j'utilise la fonction value() de ma QSpinBox : "implicit conversion loses integer precision : 'int' to 'quint16' ".

    Je précise encore que je suis en train de faire le cours de m@teo sur le chat.Merci d'avance pour votre réponse, j'ai fais la fênetre à la main.

    Voici fenClient.cpp:

    #include "FenClient.h"
    
    FenClient::FenClient() :  QWidget()
    {
        QVBoxLayout *layoutPrincipale = new QVBoxLayout;
        QHBoxLayout *layout1 = new QHBoxLayout;
        QHBoxLayout *layout2 = new QHBoxLayout;
    
        QLabel *labelIp = new QLabel("Ip du serveur :");
        QLabel *labelPort = new QLabel("Port du serveur :");
        QLabel *labelPseudo = new QLabel("Pseudo :");
        QLabel *labelMessage = new QLabel("Message :");
        ipDuServ = new QLineEdit("127.0.0.1");
        portDuServ = new QSpinBox;
        portDuServ->setMaximum(65535);
        portDuServ->setValue(50885);
        boutonConnexion = new QPushButton("Connexion");
        texteChat = new QTextEdit;
        pseudoDuClient = new QLineEdit;
        messageDuClient = new QLineEdit;
        boutonEnvoyer = new QPushButton("Envoyer");
    
        layout1->addWidget(labelIp);
        layout1->addWidget(ipDuServ);
        layout1->addWidget(labelPort);
        layout1->addWidget(portDuServ);
        layout1->addWidget(boutonConnexion);
        layoutPrincipale->addLayout(layout1);
    
        layoutPrincipale->addWidget(texteChat);
    
        layout2->addWidget(labelPseudo);
        layout2->addWidget(pseudoDuClient);
        layout2->addWidget(labelMessage);
        layout2->addWidget(messageDuClient);
        layout2->addWidget(boutonEnvoyer);
        layoutPrincipale->addLayout(layout2);
    
        setLayout(layoutPrincipale);
        setWindowTitle("Le chat de zombibi57");
    
        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;
    }
    void FenClient::on_boutonConnexion_clicked()
    {
        texteChat->append(tr("<em>Tentative de connection en cours...</em>"));
        boutonConnexion->setEnabled(false);
        socket->abort();
        socket->connectToHost(ipDuServ->text(), portDuServ->value());//Pour le forum :Le message d'erreur s'affiche ici
    }



    Voici fenClient.h:

    ifndef HEADER_FENCLIENT
    #define HEADER_FENCLIENT
    #include <QtWidgets>
    #include <QtNetwork>
    
    class FenClient : public QWidget
    {
        Q_OBJECT
        public:
            FenClient();
        private slots:
            void on_boutonConnexion_clicked();
            void on_boutonEnvoyer_clicked();
            void on_message_returnPressed();
            void donneesRecues();
            void connecte();
            void deconnecte();
            void erreurSocket(QAbstractSocket::SocketError erreur);
        private:
            QTcpSocket *socket; // Représente le serveur
            quint16 tailleMessage;
            QLineEdit *ipDuServ;
            QSpinBox *portDuServ;
            QPushButton *boutonConnexion;
            QTextEdit *texteChat;
            QLineEdit *pseudoDuClient;
            QLineEdit *messageDuClient;
            QPushButton *boutonEnvoyer;
    
    };
    
    #endif
    


    -
    Edité par AymericSt 15 juin 2019 à 11:38:40

    • Partager sur Facebook
    • Partager sur Twitter

    La programmation, c'est l'art d'exprimer sa créativité !

      15 juin 2019 à 17:27:01

      Bonjour,

      Je ne connais pas suffisamment QT pour trouver la solution, mais ce que je peux te dire:

      AymericS1 a écrit:

      ... un message d'avertissement  s'affiche quand j'utilise la fonction value() de ma QSpinBox : "implicit conversion loses integer precision : 'int' to 'quint16' " ...

      donc le warning: "Conversion [de type] implicite qui fait perdre de la précision: de type INT [sûrement sur 32 ou 64 bits] vers le type QUINT16 [sûrement sur 16 bits]".

      J'en déduis, que le type retourné par  "portDuServ->value()" est un INT, alors que le type attendu par "socket->connectToHost()" est un QUINT16.

      Si j'étais à ta place, j’essaierai du faire un static_cast, pour convertir les types.

      Enfin, pôve débutant, c'est ce que je ferai.

      Cordialement

      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2019 à 22:07:13

        Merci, c'est gentil de m'avoir répondu, j'essayerai.
        • Partager sur Facebook
        • Partager sur Twitter

        La programmation, c'est l'art d'exprimer sa créativité !

        Problème avec la fonction value() de QSpinBox

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown