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 :

Conversion de type char*, quint64

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut Conversion de type char*, quint64
    Bonjour,

    Débutant sous Qt, je me retrouve coincé malgré quelques recherches de documentations sous Qt. J'ai recherché d'abord le composant utilisé dans m_serial->write(); qui fait parti de qSerialPort. Je suis remonté sur qString de facon à faire agir une variable dans une chaîne de caractère char envoyé dans write(). Je pense pas être loin de la solution mais les rechercehs supplémentaire n'ont pas aboutie bien loin...

    En désespoir, voila ce que je cherche à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void
    MainWindow::on_btnAvance_clicked()
    {
        char speedRover = btnSpeed->value();
     
        if(m_connectionOK)
        {
            m_serial->write(QString("!,1,1,%1,1,%1,1,%1,1,%1,200,*").arg(speedRover));
            console->append(QString("%1 : %2 sur %3").arg("Avance", "80", "200"));
        }
    }
    Et les erreurs généré :
    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:129: erreur : no matching function for call to 'QSerialPort::write(QString)'
    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:129: candidates are:
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:114: qint64 QIODevice::write(const char*, qint64)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:114: note: candidate expects 2 arguments, 1 provided
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:115: qint64 QIODevice::write(const char*)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:115: note: no known conversion for argument 1 from 'QString' to 'const char*'
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:116: qint64 QIODevice::write(const QByteArray&)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:116: note: no known conversion for argument 1 from 'QString' to 'const QByteArray&'
    Si je déduit bien, c'est une conversion entre char, char* et quint64. Mais je ne sait pas encore résoudre le soucis.

    Merci beaucoup pour votre aide.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Le message d'erreur est assez limpide : refourguer un QString à write() ne peut pas marcher, cette surcharge n'existe pas — ça n'aurait pas de sens, la communication doit définir précisément le sens des bits, QString cache ces questions d'encodage. Il te faut effectuer la conversion, par exemple en passant par http://doc.qt.io/qt-5/qstring.html#toStdString et http://www.cplusplus.com/reference/string/string/c_str/ (pour un const char *) ou http://doc.qt.io/qt-5/qstring.html#toUtf8 (pour un QByteArray).
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre éclairé Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Par défaut
    C'est assez limpide pour vous. Mais moi qui suit débutant... pas vraiment

    Bon, le second souci avec votre réponse c'est qu'il y as maintenant deux questions que je me pose.

    Un qSerialPort méthode write() on est sensé passé par du char* donc je dirais lien 1. MAis avec le lien 2, je ne voie pas trop ou ça va nous menner

    Je vais quand même étudié le lien 1 dejà mais je pense pas que j'obtienne une solution adéquate!

    Ceci dit, m'en doutais un peu :
    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
     
    void
    MainWindow::on_btnAvance_clicked()
    {
        //char speedRover = btnSpeed->value();
        QString speedRover = btnSpeed->value();
        const char * c_speed = speedRover.toStdString().c_str();
     
        if(m_connectionOK)
        {
            //m_serial->write(QString("!,1,1,%1,1,%1,1,%1,1,%1,200,*").arg(speedRover));
            //console->append(QString("%1 : %2 sur %3").arg("Avance", speedRover, "200"));
     
            m_serial->write(QString("!,1,1,%1,1,%1,1,%1,1,%1,200,*").arg(c_speed));
        }
    }
    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:126: erreur : invalid conversion from 'int' to 'const char*' [-fpermissive]
    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:134: erreur : no matching function for call to 'QSerialPort::write(QString)'
    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:134: candidates are:
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:114: qint64 QIODevice::write(const char*, qint64)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:114: note: candidate expects 2 arguments, 1 provided
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:115: qint64 QIODevice::write(const char*)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:115: note: no known conversion for argument 1 from 'QString' to 'const char*'
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:116: qint64 QIODevice::write(const QByteArray&)

  4. #4
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par Caxton Voir le message
    C'est assez limpide pour vous. Mais moi qui suit débutant... pas vraiment
    La difficulté est probablement d'isoler la bonne ligne dans toutes les erreurs :

    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:134: erreur : no matching function for call to 'QSerialPort::write(QString)'
    Citation Envoyé par Caxton Voir le message
    Un qSerialPort méthode write() on est sensé passé par du char* donc je dirais lien 1. MAis avec le lien 2, je ne voie pas trop ou ça va nous menner
    Parler en liens n'a

    Je vais quand même étudié le lien 1 dejà mais je pense pas que j'obtienne une solution adéquate!

    Ceci dit, m'en doutais un peu :
    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
     
    void
    MainWindow::on_btnAvance_clicked()
    {
        //char speedRover = btnSpeed->value();
        QString speedRover = btnSpeed->value();
        const char * c_speed = speedRover.toStdString().c_str();
     
        if(m_connectionOK)
        {
            //m_serial->write(QString("!,1,1,%1,1,%1,1,%1,1,%1,200,*").arg(speedRover));
            //console->append(QString("%1 : %2 sur %3").arg("Avance", speedRover, "200"));
     
            m_serial->write(QString("!,1,1,%1,1,%1,1,%1,1,%1,200,*").arg(c_speed));
        }
    }
    [/QUOTE]
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  5. #5
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut
    Citation Envoyé par Caxton Voir le message
    C'est assez limpide pour vous. Mais moi qui suit débutant... pas vraiment
    La difficulté est probablement d'isoler la bonne ligne dans toutes les erreurs :

    /home/alexandre/Documents/Git-POSL-Rover/Programmations/Qt/Version-1.0.0/Rover-Pilot/mainwindow.cpp:134: erreur : no matching function for call to 'QSerialPort::write(QString)'
    Citation Envoyé par Caxton Voir le message
    Un qSerialPort méthode write() on est sensé passé par du char* donc je dirais lien 1. MAis avec le lien 2, je ne voie pas trop ou ça va nous menner
    Parler en liens n'a probablement pas de sens : la première méthode propose QString > std::string > const char *, la seconde QString > QByteArray. Ce sont deux des trois solutions proposées par le compilateur :

    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:114: qint64 QIODevice::write(const char*, qint64)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:115: qint64 QIODevice::write(const char*)
    /home/alexandre/Qt/5.4/gcc_64/include/QtCore/qiodevice.h:116: qint64 QIODevice::write(const QByteArray&)
    Maintenant, il te reste à remarquer que chaque message d'erreur contient la ligne où elle apparaît : plus d'erreur à la ligne 129, mais bien 134. Maintenant, je ne vois pas là où le compilateur voit des entiers…
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. conversion de types DWORD const char *
    Par koukou11 dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 04/03/2011, 01h43
  2. Réponses: 6
    Dernier message: 23/12/2009, 11h19
  3. Réponses: 2
    Dernier message: 11/05/2009, 20h18
  4. Réponses: 1
    Dernier message: 28/05/2007, 09h52
  5. Conversion de type string en char ?
    Par CoachMac dans le forum C
    Réponses: 18
    Dernier message: 08/08/2006, 10h20

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