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 :

Rendre plus clair son code (amateur)


Sujet :

Qt Quick

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut Rendre plus clair son code (amateur)
    Bonjour,

    Voila je programme en C++ sur Qt et je suis en train de faire mon interface graphique via QML. Le probleme est que mon code devient imbitable avec tout les différents rectangle, image que j'ajoute au fur et à mesure. Je me demande donc s'il est possible de créer une page page1.qml et d'ajouter une sorte de page1.qml dans mon main.qml, ainsi lors de la compilation des que le compilateur verra dans mon main.qml page1.qml il mettra tout le contenu de la page1.qml (comme une sorte de preprocessing en C lors de la compilation).

    j'espere que vous avez compris mon probleme ...

    Merci d'avance pour votre aide

  2. #2
    Responsable Qt & Livres


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

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut


    C'est un problème relativement courant. La solution est de créer tes propres composants, qui assembleront les Rectangle et Image nécessaires. Par exemple, dans la doc : http://doc.qt.io/qt-5/qml-tutorial2.html
    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 du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    j'ai essayé mais ca ne marche pas, je te donne un exemple simple de mon probleme :

    voici le code de mon main.qml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import QtQuick 2.6
    import QtQuick.Window 2.2
     
    Window {
        id: window
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
     
     
    }
    et dans mon fichier Page1.qml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import QtQuick 2.6
    import QtQuick.Window 2.2
     
    Rectangle {
        id: rectFond
        anchors.fill: window
        gradient: Gradient{
            GradientStop { position: 0.0; color: "#083286" }
            GradientStop { position: 1.0; color: "#000103" }
        }
    }
    Comme tu peux le voir, je souhaite tout simplement que mon composant (Page1.qml) change le fond de ma fenetre principal, or ca ne marche pas ma fenetre à son fond de couleur blanc, as tu une idée du probleme

  4. #4
    Responsable Qt & Livres


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

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 619
    Points : 188 601
    Points
    188 601
    Par défaut
    Pour que ton Page1 ait un impact sur ton main.qml, il faut à un moment qu'il y apparaisse . Ajoute simplement un Page1 {} après le titre : tu instancieras le composant Page1 dans ton fichier principal.
    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
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    Pour compléter le message de Dourouc, n'oublie pas non plus de dimensionner ton Page1 à la dimension de ta fenêtre, ou toute autre dimension souhaitée.

    Bonne continuation.
    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

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2013
    Messages : 274
    Points : 56
    Points
    56
    Par défaut
    Merci pour vos messages, j'ai réussi a faire un composant, mais des que j'ai complexifié un peu le code ca ne marche plus et impossible de comprendre mon erreur.
    J'ai fait un fichier Page1.qml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Text {
        id: text_p1
        anchors.centerIn: parent
        text: "page 1"
        color: "white"
    }
    et un fichier Page2.qml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Text {
        id: text_p2
        anchors.centerIn: parent
        text: "page 2"
        color: "white"
    }
    et dans mon main.qml j'ai :
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    Window {
        id: my_window
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
     
        SwipeView {
            id: view
     
            currentIndex: p1
            anchors.fill: parent
     
            Page1{
            }
            Page2{
            }
     
        }
     
        PageIndicator {
            id: indicator
     
            count: view.count
            currentIndex: view.currentIndex
     
            anchors.bottom: view.bottom
            anchors.horizontalCenter: parent.horizontalCenter
        }
     
    }
    mais impossible de parvenir à me mettre le text au milieu. j'ai comme message d'erreur : QML : SwipeView has detected conflicting anchors. Unable to layout the item. avez vous une idée du probleme?
    merci d'avance

  7. #7
    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 : 42
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut


    A mon avis ton erreur est très simple et le message
    QML : SwipeView has detected conflicting anchors
    assez explicite : tu as un problèmes avec tes propriétés anchors.

    Je ne connais pas très bien le SwipeView, mais selon moi tes composants PageX.qml devraient plutôt ressembler à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Item {
        Text {
            id: text_p2
            anchors.centerIn: parent
            text: "page 2"
            color: "white"
        }
    }
    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

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