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 :

Signal/slot pour ajouter un objet (exécution d'une procédure)

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut Signal/slot pour ajouter un objet (exécution d'une procédure)
    Bonjour,
    je voudrais ajouter un objet (cam) quand je clic sur un buttons
    c'est pour cela j'ai fait une petite interface j'ai définie
    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
    page_13 = new QWidget();
        page_13->setObjectName(QString::fromUtf8("page_13"));
        page_13->setGeometry(QRect(0, 0, 211, 250));
     
     
        toolBox_5 = new QToolBox(dockWidgetContents_5);
        toolBox_5->setObjectName(QString::fromUtf8("toolBox_5"));
        toolBox_5->setGeometry(QRect(0, 0, 211, 331));
        toolBox_5->setAutoFillBackground(false);
        toolBox_5->setFrameShape(QFrame::NoFrame);
        toolBox_5->setFrameShadow(QFrame::Plain);
        toolBox_5->addItem(page_14, QString::fromUtf8("Object"));
        toolBox_5->setItemText(toolBox_5->indexOf(page_14), QApplication::translate("MainWindow", "Camera", 0, QApplication::UnicodeUTF8));
     
        toolButton_17 = new QToolButton(page_13);
        toolButton_17->setObjectName(QString::fromUtf8("toolButton_13"));
        toolButton_17->setGeometry(QRect(10, 10, 31, 31));
        toolButton_17->setText(QApplication::translate("MainWindow", "Add", 0, QApplication::UnicodeUTF8));
     
        doubleSpinBox = new QDoubleSpinBox(groupBox_6);
        doubleSpinBox->setObjectName(QString::fromUtf8("doubleSpinBox"));
        doubleSpinBox->setGeometry(QRect(10, 40, 51, 22));
     
        doubleSpinBox_2 = new QDoubleSpinBox(groupBox_6);
        doubleSpinBox_2->setObjectName(QString::fromUtf8("doubleSpinBox_2"));
        doubleSpinBox_2->setGeometry(QRect(70, 40, 51, 22));
     
        doubleSpinBox_3 = new QDoubleSpinBox(groupBox_6);
        doubleSpinBox_3->setObjectName(QString::fromUtf8("doubleSpinBox_3"));
        doubleSpinBox_3->setGeometry(QRect(130, 40, 51, 22));
     
        label = new QLabel(groupBox_6);
        label->setObjectName(QString::fromUtf8("label"));
        label->setGeometry(QRect(10, 20, 46, 13));
        label->setText(QApplication::translate("MainWindow", "X :", 0, QApplication::UnicodeUTF8));
     
        label_2 = new QLabel(groupBox_6);
        label_2->setObjectName(QString::fromUtf8("label_2"));
        label_2->setGeometry(QRect(70, 20, 46, 13));
        label_2->setText(QApplication::translate("MainWindow", "Y :", 0, QApplication::UnicodeUTF8));
     
        label_3 = new QLabel(groupBox_6);
        label_3->setObjectName(QString::fromUtf8("label_3"));
        label_3->setGeometry(QRect(130, 20, 46, 13));
        label_3->setText(QApplication::translate("MainWindow", "Z :", 0, QApplication::UnicodeUTF8));
    ma procédure de l'ajout est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        void OgreWidget::add_camera(const Ogre::Vector3 &pos)
        {
        char name_cam[16];
     
        sprintf(name_cam, "cam%d", mCount_cam++);
     
        ogreCamera1 = ogreSceneManager->createCamera(std::string(name_cam) +"PlayerCam");
     
        ogreCamera1->setPosition(pos);
        ogreCamera1->lookAt(0,0,-200);
     
        }
    j'ai pas maintenant compris comment je vais faire signal/slot du button pour qu'il exécute la procédure(je connus faire des signal slot simple mais pas comme ça)
    est ce que vous avez une idée ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 131
    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 131
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Tout d'abord :
    Devrait être remplacé par un std::string ou QString, ou tout ce que vous voulez, mais ne faites pas ce genre de chaine de caractères en C++.

    Pour votre problème, pour faire un slot, il faudra changer un peu la signature de la fonction (ou en faire une intermédiaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void OgreWidget::add_camera(const Ogre::Vector3 &pos)
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void OgreWidget::add_camera()
    Et pour finir, avez vous regarder du coté des cours : http://matthieu-brucher.developpez.c...t/signal-slot/
    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
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    Bonjour,
    j'ai pas compris pourquoi je n'utilise pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void OgreWidget::add_camera(const Ogre::Vector3 &pos)
    parce que j'ai essayé de changer la position d'une caméra et j'ai fait ça
    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
     
    void OgreWidget::setCameraPosition(const Ogre::Vector3 &pos)
    {
     
    	ogreCamera->setPosition(pos);
     
        this->update();
    	ogreRenderWindow->update();
        emit  cameraPositionChanged(pos);
     
    	 }
     
    void OgreWidget::keyPressEvent(QKeyEvent *e)
    {
    	static QMap<int, Ogre::Vector3> keyCoordModificationMapping;
    	static bool mappingInitialised = false;
     
    	if(!mappingInitialised)
    	{
    		keyCoordModificationMapping[Qt::Key_Z] 		  = Ogre::Vector3(0,  0, -5);
    		keyCoordModificationMapping[Qt::Key_S] 		  = Ogre::Vector3(0,  0,  5);
    		keyCoordModificationMapping[Qt::Key_Q] 		  = Ogre::Vector3(-5, 0,  0);
    		keyCoordModificationMapping[Qt::Key_D] 		  = Ogre::Vector3( 5, 0,  0);
    		keyCoordModificationMapping[Qt::Key_PageUp]   = Ogre::Vector3(0,  5,  0);
    		keyCoordModificationMapping[Qt::Key_PageDown] = Ogre::Vector3(0, -5,  0);
     
    		mappingInitialised = true;
    	}
     
    	QMap<int, Ogre::Vector3>::iterator keyPressed =
    		keyCoordModificationMapping.find(e->key());
    	if(keyPressed != keyCoordModificationMapping.end() && ogreCamera)
    	{
    		const Ogre::Vector3 &actualCamPos = ogreCamera->getPosition();
    		setCameraPosition(actualCamPos + keyPressed.value());
     
    		e->accept();
    	}
    	else
    	{
    		QWidget::keyPressEvent(e);
    	}
    }
    il a fonctionne bien (quand j'entre des valeurs en x,y,z la cam change sa position a la position donné )(même je peux l'utiliser pour changer la position d'un objet déja crée dans "create scene")

    mais si au lieu de changer la position de la cam j'ajoute une autre cam ou même un autre objet ça ne marche pas , si je fait ça
    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
     
        void OgreWidget::setobjectPosition(const Ogre::Vector3 &pos)
        {
           mEntity = ogreSceneManager->createEntity(ogreSceneManager->createEntity( Ogre::SceneManager:: PT_SPHERE);
                 mNode = ogreSceneManager->getRootSceneNode()->
                    createChildSceneNode("chambreNode", Ogre::Vector3(0.0f,0.0f, 0.0f));
                mNode->attachObject(mEntity);
            mNode->setPosition(pos);
                 this->update();
           ogreRenderWindow->update();
                }
    void OgreWidget::keyPressEvent(QKeyEvent *e)
    {
       static QMap<int, Ogre::Vector3> keyCoordModificationMapping;
       static bool mappingInitialised = false;
     
       if(!mappingInitialised)
       {
          keyCoordModificationMapping[Qt::Key_Z]         = Ogre::Vector3(0,  0, -5);
          keyCoordModificationMapping[Qt::Key_S]         = Ogre::Vector3(0,  0,  5);
          keyCoordModificationMapping[Qt::Key_Q]         = Ogre::Vector3(-5, 0,  0);
          keyCoordModificationMapping[Qt::Key_D]         = Ogre::Vector3( 5, 0,  0);
          keyCoordModificationMapping[Qt::Key_PageUp]   = Ogre::Vector3(0,  5,  0);
          keyCoordModificationMapping[Qt::Key_PageDown] = Ogre::Vector3(0, -5,  0);
     
          mappingInitialised = true;
       }
     
       QMap<int, Ogre::Vector3>::iterator keyPressed =
          keyCoordModificationMapping.find(e->key());
       if(keyPressed != keyCoordModificationMapping.end() && ogreCamera)
       {
             setobjectPosition(keyPressed.value());
     
          e->accept();
       }
       else
       {
          QWidget::keyPressEvent(e);
       }
    }
    il me fait une exception ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mEntity = ogreSceneManager->createEntity(ogreSceneManager->createEntity( Ogre::SceneManager:: PT_SPHERE);
    pourquoi?? (je ne peux pas ajouter une cam ou un objet pourtant je peux modifier leur positions )?

    edit: il ajoute maintenant les objet il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Ogre::String name = "Node " + Ogre::StringConverter::toString(Ogre::Root::getSingletonPtr()->getTimer()->getMicroseconds()); // Provides a unique timestamp - the time since the application was started in microseconds.
    mNode = ogreSceneManager->getRootSceneNode()->
                createChildSceneNode(name, pos)
    mais pas correctement

    j'utilise des QDoubleSpinBox pour enter la positon alors
    un QDoubleSpinBox pour x,un autre pour y et les troisième pour z
    le problème c'est que quand j'écris un valeur en x il ajoute l'objet sans attendre y, et z alors quands j'entre en y il ajoute un autre objet
    enfin mon but est ajouté un seul objet mais il m'ajoute 3 objets

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/11/2010, 14h01
  2. Ajout d'objets graphiques depuis une autre classe
    Par metalamania dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 27/07/2010, 15h55
  3. Réponses: 2
    Dernier message: 23/04/2010, 01h16
  4. Réponses: 1
    Dernier message: 04/11/2009, 00h39
  5. Réponses: 4
    Dernier message: 06/02/2008, 18h05

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