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 Quick Discussion :

Transcription de code C++ vers code Python [Débuter]


Sujet :

Qt Quick

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut Transcription de code C++ vers code Python
    Bonjour à tous,

    Dans le cadre de la rédaction d'un article sur l'utilisation de QtQuick avec Python (PyQt5), j'ai choisi de transcrire l'un des exemples fournis avec Qt5.1.1, plus précisément celui de l'éditeur de texte qui doit en théorie se trouver à cette adresse sur votre PC windows préféré : examples\quick\tutorials\gettingStartedQml

    Toute la partie concernant le code QML + une grosse partie du code C++ ne me pose pas vraiment de souci.
    Là où par contre ça commence à se compliquer c'est lorsque ce dernier commence à s'habiller à profusion des symboles *, <, >, *, -> etc.

    Pour un pti gars habitué à un langage clair et simple comme python c'est pas forcément très simple.

    D'où ma venue ici.

    Dans l'exemple et plus précisément dans le fichier : directory.cpp situé dans le dossier filedialog, on peut lire notamment ces quelques lignes :

    Code C++ : 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
    ...
    void appendFiles(QQmlListProperty<File> *property, File *file)
    {
        Q_UNUSED(property)
        Q_UNUSED(file)
        // Do nothing. can't add to a directory using this method
    }
    ...
    ...
    File* fileAt(QQmlListProperty<File> *property, int index)
    {
        return static_cast< QList<File *> *>(property->data)->at(index);
    }
    //File faisant référence à la classe File écrite dans file.cpp
    ...
    ...
    int filesSize(QQmlListProperty<File> *property)
    {
        return static_cast< QList<File *> *>(property->data)->size();
    }
    ...
    ...
    void clearFilesPtr(QQmlListProperty<File> *property)
    {
        return static_cast< QList<File *> *>(property->data)->clear();
    }
    ...
    ...
    QQmlListProperty<File> Directory::files()
    {
        refresh();
        return QQmlListProperty<File>(this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr);
    }

    Pour ce qui, jadis aurait lu la traduction de Maxime Spriet et Paul Mustière, la partie qui me bloque concerne celle qui doit théoriquement lire, lister (ces deux points c'est ok) et afficher la liste de fichiers "*.txt" dans un GridView, permettant ainsi la sélection du fichier à éditer.

    Après quelques heures passées à tenter de comprendre ce que tout le charabia ci-dessus voulais dire, je commence sérieusement à envisager l'ajout d'un QFileDialog dans mon tuto , à moins qu'une âme charitable veuillez bien prendre quelques minutes pour m'expliquer la signification de ces lignes

    Merci d'avance à tous.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Par défaut
    J'ai commenté tout le code qui pose problème. En espérant avoir été assez explicite.

    Code C++ : 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
    // Méthode qui ne fait strictement rien
    void appendFiles(QQmlListProperty<File> *property, File *file)
    {
        Q_UNUSED(property)
        Q_UNUSED(file)
    }
     
    // Méthode qui retourne un pointeur sur un File
    File* fileAt(QQmlListProperty<File> *property, int index)
    {
        // property contient un membre public data qui est casté en un pointeur sur une QList de pointeur sur File.
        // Une fois que l'on a cette liste, on selectionne le fichier qui nous intéresse avec le ->at(index) et on retourne un
        // pointeur sur ce dernier.
        return static_cast< QList<File *> *>(property->data)->at(index);
    }
     
    int filesSize(QQmlListProperty<File> *property)
    {
        // Grosso modo pareil que la méthode précedente. Sauf qu'au lieu de retourner un pointeur sur un File, on retourne 
        // le nombre d'élements contenus dans cette fameuse liste.
        return static_cast< QList<File *> *>(property->data)->size();
    }
     
    void clearFilesPtr(QQmlListProperty<File> *property)
    {
        // Toujours le même cast, sauf qu'ici on vide la liste de pointeurs sur File.
        return static_cast< QList<File *> *>(property->data)->clear();
    }
     
    QQmlListProperty<File> Directory::files()
    {
        // Some magic here 
        refresh();
     
        // Création d'une QQmlListProperty<File> avec les membres de la classe.
        return QQmlListProperty<File>(this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr);
    }

    Par contre aucune idée de ce que ça peut donner en Python.

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 771
    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 771
    Par défaut
    Le C++ est le langage le plus lisible au monde .

    Vu le niveau de l'exemple (getting started), il est probablement déjà traduit et disponible avec PyQt 5.0.1, non (http://www.riverbankcomputing.com/news/pyqt-501) ? (Pas encore fait la mise à jour vers cette version pour le moment.)
    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 !

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Malheureusement il n'y est pas... ou bien caché alors... ou faut vraiment que je songe à changer de lunettes

    Merci Arnold, je vais essayer de transcrire tout ceci en Python dès que j'aurai 5min et récupéré quelques neuronnes perdus dans le C++.
    En attendant je me sers d'un QFileDialog, ce qui en soit est finalement une bonne chose car ça va me permettre d'illustrer le fait que l'on peut utiliser QtQuick et QtWidgets en même temps

    Comme j'ai eu la réponse à ma question, je passe ce topic en résolu.

    Encore merci.

    Citation Envoyé par Dourouc05
    Le C++ est le langage le plus lisible au monde
    Y en a quand même qui aime se faire du mal...
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. [WD15] Code VB vers code Windev
    Par Jeje9 dans le forum WinDev
    Réponses: 3
    Dernier message: 24/07/2012, 13h19
  2. Réponses: 2
    Dernier message: 04/06/2009, 00h13
  3. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  4. [VB.net]problème de conversion de code c# vers VB.net
    Par cladsam dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/10/2005, 14h07
  5. Adaptation d'un code TMemo vers TRichEdit : problème de ScrollBars
    Par Droïde Système7 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/01/2005, 15h06

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