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 :

Connecter un signal à un slot

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2014
    Messages : 6
    Par défaut Connecter un signal à un slot
    Bonjour,

    Je suis en train de développer un programme sous Qt pour ma Raspberry et j'ai un problème pour connecter un SIGNAL avec un SLOT.
    Voici mon problème :

    - J'ai une fenêtre principale dans laquelle j'affiche des images provenants d'une camera
    - Pour récupérer les images j'ai créé un thread différent de celui de la fenêtre principale
    - Dans ce thread (celui de la caméra) j'ai besoin de créer une nouvelle fenêtre pour réaliser la configuration de la caméra et c'est pour récupérer les signaux (appui sur un bouton, ...) de cette fenêtre que j'ai un problème

    Voici une partie de ma classe principale (fenêtre d'affichage des images) qui créée le nouveau thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    camThread = new QThread(this);
        cam = new cameraC(this);
        cam->moveToThread(camThread);
        connect(camThread, SIGNAL(started()), cam, SLOT(process()));
        qRegisterMetaType<QImage>("QImage");
        connect(cam, SIGNAL(updateImage(QImage)), this, SLOT(updatePictureDisplay(QImage)));
        connect(cam, SIGNAL(finished()), camThread, SLOT(quit()));
        camThread->start();
    Et dans le thread que je viens de créer, voici la partie de la fenêtre de configuration :
    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
    settingsWindow = new QWidget();
        settingsWindow->setObjectName(QString::fromUtf8("Settings Window"));
        settingsWindow->setFixedSize(0,0);
     
        main_verticalLayout = new QVBoxLayout;
        main_verticalLayout->setSpacing(6);
        main_verticalLayout->setContentsMargins(11, 11, 11, 11);
        main_verticalLayout->setObjectName(QString::fromUtf8("main_verticalLayout"));
     
        triggerCheckbox = new QCheckBox(settingsWindow);
        triggerCheckbox->setText("Trigger ON/OFF");
        if(triggerMode.onOff){
            triggerCheckbox->setChecked(true);
        }
        connect(triggerCheckbox, SIGNAL(stateChanged(int)), this, SLOT(updateTriggerOnOff(int)));
     
        applyButton = new QPushButton(settingsWindow);
        applyButton->setText("Apply");
        connect(applyButton, SIGNAL(clicked(bool)), this, SLOT(applySettings(bool)));
     
        main_verticalLayout->addWidget(triggerCheckbox);
        main_verticalLayout->addWidget(applyButton);
     
        settingsWindow->setLayout(main_verticalLayout);
     
        settingsWindow->show();
    Le problème s'est que les SLOTs "updateTriggerOnOff" et "applySettings" ne sont jamais exécutés lors de l'émission de leurs signaux respectifs.

    Voila j'espère que j'ai été assez claire.
    Merci par avance.

    Jo

  2. #2
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Qt impose que tous les composants graphiques soient créés et utilisés dans le thread principal (appelé GUI thread) doc.
    Pourquoi créer un second thread ? Attendre que l'utilisateur clique sur un bouton ou autre chose peut se faire directement dans le thread principal, c'est le but de la boucle d'évènements Qt.

Discussions similaires

  1. connect(), signal et slot
    Par Go'Gaule dans le forum Débuter
    Réponses: 3
    Dernier message: 27/05/2011, 08h26
  2. probleme de code Qt: signal and Slot
    Par vivh349 dans le forum Qt
    Réponses: 10
    Dernier message: 08/07/2009, 12h17
  3. SIGNAL et SLOT (gros debutant)
    Par mesobius dans le forum Débuter
    Réponses: 4
    Dernier message: 19/01/2009, 11h18
  4. connect Signal et slot perso
    Par freecircus dans le forum Qt
    Réponses: 3
    Dernier message: 13/12/2006, 20h25

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