Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Méthode

Bonjour,

J'essaie d'appliquer les principes QML /C++(séparation interface / code) mais je galère vraiment...

L'idée est de créer une petite application qui analyse un répertoire de logs. Pour commencer facilement, je veux juste ouvrir un répertoire (FolderDialog) et afficher dans la fenêtre des infos comme nombre de fichiers, le plus récent, le plus ancien, etc.

Comment dois-je procéder ?
Est-il bon de créer une classe RepertoireLog qui prend en argument le nom du répertoire avec des fonctions comme listeDesFichers, plusAncien, plusRecent, nombreFichiers, etc ?

A quel moment dois-je instancier cette classe ? Dois-je le faire dans le main.qml ?

Toute piste sera la bienvenue... Merci d'avance !


Réponses

  • Salut,

    regarde la doc de Qt : doc.qt.io/qt-5/qtqml-cppintegration-exposecppattributes.html
    Je pense que les bases dont tu peux avoir besoin sont dedans
    Bonne lecture ;)
  • Merci. Ça rejoint tout ce que je peux lire en ce moment sur le "comment faire" pour communiquer entre C++ et QML. Mais il me manque la base, c'est-à-dire identifier ce que je dois faire communiquer...

    J'ai crée mon interface tant bien que mal : quelques Labels, FolderDialog et bien sûr ils sont vides au départ. L'objectif est de les remplir en Qt/C++ (par exemple afficher le nombre de fichiers d'un répertoire).

    Ça me parait plus complexe en QML/C++ qu'avec les QWidgets... Mais je veux vraiment m'y mettre ;-)
  • 13 May modifié
    Alors en gros (car je n'ai fait du qml que 2 fois dans ma vie)

    tu as une class c++ qui va gérer tes fichiers
    class MyFilesClass : public QObject
    {
    Q_OBJECT
    Q_PROPERTY(int filesCount READ filesCount WRITE setFilesCount NOTIFY filesCountChanged)

    public:
    void setFilesCount (int &a) {
    if (a != m_filesCount) {
    m_filesCount= a;
    emit filesCountChanged();
    }
    }
    QString filesCount() const {
    return m_filesCount;
    }
    Q_INVOKABLE void computeFilesCount() {
    int counter = 0;
    //here some code
    setFilesCount(counter );
    }
    signals:
    void filesCountChanged();
    private:
    QString m_filesCount;
    };

    //main.cpp
    MyFilesClass mfc;
    view.engine()->rootContext()->setContextProperty("mfc", &mfc);
    //qml
    Text {
    width: 100; height: 100
    text: mfc.filesCount
    Component.onCompleted: {
    mfc.computeFilesCount()
    }
    }
  • J'y vois un peu plus clair désormais, merci. Je vais tester tout ça !
Connectez-vous ou Inscrivez-vous pour répondre.