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 :

Gérer l'affichage des fenêtres avec des signaux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut Gérer l'affichage des fenêtres avec des signaux
    Bonjour à tous,

    Je refais mon message précédant car il n'était pas très clair et j'ai voulu simplifier des choses.

    Voilà le sujet, je suis sous QtQuick, je veux faire quelque chose qui me permette de manipuler des signaux ( et des slots) dan le but de alterner des fenêtres.

    J'ai donc 3 fichiers :
    Fenetre1.qml
    Fenetre2.qml
    main.cpp

    Fenetre 1 et 2 sont des fenêtres toutes simples avec chacune dans leurs code :
    Pour la fenêtre 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    signal fen1Sig(string msg)
                MouseArea {
                    id: mouse_area1
                    anchors.fill: parent
                    onClicked: item.fen1Sig("Go fenetre 2")
                }
    Dans la fenêtre 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     signal fen2Sig(string msg)
                    MouseArea {
                        id: mouse_area1
                        anchors.fill: parent
                        onClicked: item.fen2Sig("Go fenetre 1")
                }
    Je ne vous met pas tout le code pour ne pas encombrer le sujet.

    Et voici le main.cpp :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <QtGui/QApplication>
    #include "qmlapplicationviewer.h"
    #include <QObject>
     
     
    class GestFen : public QObject{
    public:
        GestFen(){
     
            viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
            viewer.showExpanded();
        }
     
        QmlApplicationViewer getViewer(){
            return(viewer);
        }
     
    public slots :
        void slotSwitchTo2(QString message){
     
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre2.qml"));
            viewer.showExpanded();
        }
        void slotSwitchTo1(QString message){
     
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
            viewer.showExpanded();
     
        }
     
    private :
        QmlApplicationViewer viewer;
    };
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        GestFen fen;
     
        QObject::connect(*fen.getViewer(),SIGNAL(fen1Sig(QString)),*fen, SLOT(fen.slotSwitchTo2()));
     
        return app.exec();
    }
    Le but pour le moment est donc de commencer sur la fenêtre 1 pour aller sur la 2. Malheuresement j'ai 4 erreurs :

    c:\QtSDK\Simulator\Qt\mingw\include\QtDeclarative\qdeclarativeview.h:110: error: 'QDeclarativeView::QDeclarativeView(const QDeclarativeView&)' is private
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\qmlapplicationviewer\qmlapplicationviewer.h:17: error: within this context
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\main.cpp:43: error: no match for 'operator*' in '*GestFen::getViewer()()'
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\main.cpp:43: error: no match for 'operator*' in '*fen'
    Et j'ai la ligne du connect soulignée en rouge.

    Voilà j’espère que je vous ai donné assez d'éléments pour pouvoir me répondre

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Cette ligne est étrange:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(*fen.getViewer(),SIGNAL(fen1Sig(QString)),*fen, SLOT(fen.slotSwitchTo2()));
    Notamment le *fen.getViewer().
    Si getViewer() il y a, je pense qu'il devrait retourner un pointer. Ce que vous ne faites pas et c'est un grand tort (une fois que vous le ferez, vous aurez les premières erreurs en moins).
    Le tort est:
    Ne pas retourner un pointeur va créer une copie de l'objet que vous souhaitez. Une copie d'une fenêtre, c'est étrange

    Pour un élément qui n'est pas un pointeur, cela ne veut pas dire grand chose (du moins, je ne m'en rappelle plus). Il fallait surement mettre:
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    Bonjour et merci de votre réponse,

    J'avais déjà corrigé ce problème hier mais je me retrouve toujours avec ces erreurs notamment au niveau du getViewer().

    Le code du main.cpp
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #include <QtGui/QApplication>
    #include "qmlapplicationviewer.h"
    #include <QObject>
     
     
    class GestFen : public QObject{
    public:
        GestFen(){
     
            viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
            viewer.showExpanded();
        }
     
        QmlApplicationViewer getViewer(){
            return(viewer);
        }
     
    public slots :
        void slotSwitchTo2(QString message){
     
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre2.qml"));
            viewer.showExpanded();
        }
        void slotSwitchTo1(QString message){
     
            viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
            viewer.showExpanded();
     
        }
     
    private :
        QmlApplicationViewer viewer;
    };
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        GestFen fen;
     
        QObject::connect(&fen.getViewer().rootObject(),SIGNAL(fen1Sig(QString)),&fen, SLOT(slotSwitchTo2(QString)));
     
        return app.exec();
    }
    Les erreurs :
    c:\QtSDK\Simulator\Qt\mingw\include\QtDeclarative\qdeclarativeview.h:110: error: 'QDeclarativeView::QDeclarativeView(const QDeclarativeView&)' is private
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\qmlapplicationviewer\qmlapplicationviewer.h:17: error: within this context
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\main.cpp:43: error: lvalue required as unary '&' operand

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    J'ose me quoter:
    Si getViewer() il y a, je pense qu'il devrait retourner un pointer. Ce que vous ne faites pas et c'est un grand tort (une fois que vous le ferez, vous aurez les premières erreurs en moins).
    Soit ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QmlApplicationViewer* getViewer()
    {
            return &viewer;
    }
    Note: "return" n'est pas une fonction, mais un mot clé du C++. Donc pas besoin de parenthèses.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Par défaut
    Bonjour et merci pour ta réponse

    Aller on y est presque !

    Il ne me reste plus qu'une erreur !

    Voici le code tel qu'il est:

    Gestfen.cpp
    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
    #include "gestfen.h"
     
    GestFen::GestFen(){
     
        viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
        viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
        viewer.showExpanded();
    }
    QmlApplicationViewer* GestFen::getViewer(){
        return(&viewer);
    }
     
     
    void GestFen::slotSwitchTo2(QString message){
     
        viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre2.qml"));
        viewer.showExpanded();
    }
    void GestFen::slotSwitchTo1(QString message){
     
        viewer.setMainQmlFile(QLatin1String("qml/Test8/Fenetre1.qml"));
        viewer.showExpanded();
     
    }
    main.cpp
    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
    #include <QtGui/QApplication>
    #include "qmlapplicationviewer.h"
    #include <QObject>
    #include "gestfen.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        GestFen fen;
     
        QObject::connect(&fen.getViewer().rootObject(),SIGNAL(fen1Sig(QString)),&fen, SLOT(slotSwitchTo2(QString)));
     
        return app.exec();
    }
    Et voici l'erreur :
    C:\Users\aouizerate\Documents\Test\Test8-build-simulator-Simulator_Qt_for_MinGW_4_4__Qt_SDK__Debug\..\Test8\main.cpp:12: error: request for member 'rootObject' in 'fen.GestFen::getViewer()', which is of non-class type 'QmlApplicationViewer*'
    Je vois bien que le soucis est au niveau du rootObject mais je ne vois pas trop comment le régler

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    La fonction membre getViewer() retournant un pointeur, c'est l'opérateur -> et non . qu'il te faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QObject::connect(&fen.getViewer()->rootObject(),SIGNAL(fen1Sig(QString)),&fen, SLOT(slotSwitchTo2(QString)));

Discussions similaires

  1. Affichage page par page des résultats avec des pointillés pour les numeros de page
    Par lewhechris dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 27/10/2011, 12h15
  2. Une fenêtre avec des fenêtres internes
    Par hb2ee dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/08/2011, 15h41
  3. Parser un JSON avec des variables avec des "-" et des ":"
    Par Quentin33 dans le forum Windows Phone
    Réponses: 2
    Dernier message: 22/05/2011, 01h04
  4. Réponses: 4
    Dernier message: 02/04/2008, 17h51
  5. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45

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