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 :

Appel de méthode Qt depuis une fonction statique

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut Appel de méthode Qt depuis une fonction statique
    Bonjour à tous,

    je réalise une interface de contrôle d'une carte national instrument. J'importe donc la bibliothèque NiDaqmw.h
    je cherche à mettre à jour l'interface quand une tâche NI se termine. Pour cela je définies la fonction DoneCallBack qui doit être une fonction statique.

    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
    // ui.h
    class ui: public QWidget
    {
        Q_OBJECT
     
    private : 
        int N;
     
        QpushButton *boutton;
     
        static int32 CVICALLBACK DoneCallback (TaskHandle taskHandle, int32 status, void *callbackData);
        // le paramètre intéressant c'est callBackData, je m'en sers pour passer à la fonction une référence à un objet dans mon cas : "mainWindow"
    };
     
    // .cpp
    ui::ui(QWidget *parent)
        : QWidget(parent)
    {
     
        int32 error;
        aiChannelNumber = 1;
        qRegisterMetaType<float64>("float64");
     
        //aiRecordPB
        boutton=  new QPushButton ("Record!");
    }
    int32 CVICALLBACK ui::DoneCallback(TaskHandle taskHandle, int32 status, void *callbackData)
    {
        MainWindow* monui= (MainWindow*) callbackData;
     
        qDebug()<<"Done!\n";                                   //marche
        monui->N = ui->N+1;                                    //marche
        monui->boutton->setText("données acquises); //crashe
        return(0);
    }
    J'arrive à changer des variables de l'objet ui depuis la fonctions "ui->N = 5" mais pas à appeler ses méthodes/fonctions. Je ne sais pas si c'est possible et si oui d'où viendrait l'erreur : problème de C++ ou de Qt?
    merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 642
    Points
    7 642
    Par défaut
    Bonjour,

    Si des fonctions membres ne peuvent pas s'executer et d'autres oui, c'est peut-être que la callback est appelé d'un contexte non compatible avec le GUI.

    Une autre possibilité, plus probable, est que l'objet que tu penses utiliser n'est pas le bon. Donc rien ne marche mais pour les membres simple ça écrit/lit n'importe où et les fonctions vont planter!
    Le problème est la ligne 29. Tu utilises un 'cast façon C' il ne faut normalement pas l'utiliser. Il faut surtout s'assurer que le cast qui a été fait lors du passage du paramètre vers void* soit exactement de symétrique de celui-utilisé ici. Par exemple si l'objet transmis connu comme étant un QObject, il faut dans la callback effectuer la conversion inverse, ça serait ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MainWindow* monui = static_cast<MainWindow*>(static_cast<QObject*>(callbackData));

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Points : 75
    Points
    75
    Par défaut
    Super ça marche! Merci pour ton aide.
    pour être honnête je comprends pas vraiment, c'est au dessus de mon niveau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'un widget depuis une fonction
    Par eliaslao dans le forum Débuter
    Réponses: 1
    Dernier message: 29/04/2014, 16h44
  2. appeler un windows.form.component depuis une fonction statique
    Par moshehayun dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/07/2009, 09h14
  3. comment appeler un widget depuis une fonction
    Par Thierry {-|-o dans le forum Tkinter
    Réponses: 3
    Dernier message: 02/01/2008, 23h23
  4. Réponses: 1
    Dernier message: 25/05/2007, 14h33
  5. Appel d'une fonction A depuis une fonction B.
    Par LeFlou dans le forum C++
    Réponses: 9
    Dernier message: 22/05/2007, 17h36

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