QTCreator..., C++, signal et slots: - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 46 sur 46

QTCreator..., C++, signal et slots:



  1. #31
    Bounoume

    Re : QTCreator..., C++, signal et slots:


    ------

    Je viens de modifier en passant les adresses:

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    Truc trucx;
    Thread1 threadx;

    //connect (&trucx,SIGNAL( couine(int i)),&threadx,SLOT (stoppe(int i)));
    QObject::connect(&trucx, &Truc::couine, &threadx, &Thread1::stoppe);

    ui->setupUi(this);
    }
    hélas mêmes messages d'erreur.
    il y aussi toujours l'autre ligne:
    /mainwindow.cpp:12: erreur : no matching function for call to 'MainWindow::connect(Truc*, void (Truc::*)(int), Thread1*, void (Thread1::*)(int))'
    QObject::connect(&trucx, &Truc::couine, &threadx, &Thread1::stoppe);
    ^
    /home/hubert/projets-c/boitexte_threads/mainwindow.h:67: erreur : 'void Truc::couine(int)' is protected
    void Truc::couine(int i)
    ^

    pour info: dans mainwindow.h ...
    les include:
    #include <QMainWindow>
    /* boitexte_threads......*/
    #include <QMutex> // probable que j'en aie besoin un jour....
    #include <QThread>
    #include <QObject>
    //#include <QSignalTransition> // utile ou non? j'ai essayé avec et sans....

    les déclarations:
    class Truc : public QObject
    { Q_OBJECT
    public :void refuse();
    signals:
    void couine(int i);
    };


    void Truc::couine(int i)
    { };
    Est-ce là-dedans qu'est le problème?

    -----
    Dernière modification par Bounoume ; 04/07/2018 à 18h08.
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  2. #32
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Peux-tu zipper le projet et le mettre en pièce jointe?

  3. #33
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    Voici le projet zippé.
    à bientôt.....
    Fichiers attachés Fichiers attachés
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  4. #34
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Bon, ça compile après quelques modifs:

    J'ai été assez surpris de retrouver toutes tes définitions et déclarations de classes dans un seul fichier. C'est possible, mais je préfère écrire un fichier .h et un .cpp par classe.
    Quoiqu'il en soit, tu as placé la définition des fonctions dans le .h:
    Code:
    voidThread1::demarre()
    {
       return;
    };
    
    voidThread1::stoppe(inti)
    {
       quit();
    };
    
    voidThread1::run()
    {
          quit();//provisoire:terminerdesuite.....
         return;
    };
    
    voidTruc::refuse()
    {
    };
    Déplace-les dans le .cpp et retire le ; inutile après l'accolade fermante.

    De plus, et c'est très important, il ne faut pas définir le signal. Supprime donc les lignes suivantes.
    Code:
    voidTruc::couine(int i)
    { 
    };
    Je ne garantis pas que ce code fonctionne mais en tout cas il compile.

  5. #35
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    Code:
    Déplace-les dans le .cpp et retire le ; inutile après l'accolade fermante.
    De plus, et c'est très important, il ne faut pas définir le signal. Supprime donc les lignes suivantes.
    Code:
    voidTruc::couine(int i)
    { 
    };

    ça compile bien.....
    mais seulement avec la syntaxe de QT4:
    connect (&trucx,SIGNAL( couine(int i)),&threadx,SLOT (stoppe(int i)));

    la syntaxe sans les mots-clé SIGNAL et SLOT n'est pas acceptée: question de configuration de ma version de QT (même si la version de QTCreator (3.5.1 ) affirme être basée sur QT 5.5.1..... tant pis pour les nouvelles fonctionnalités de cette version.....
    Merci beaucoup pour ton aide
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  6. #36
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    J'utilise Qt creator 3.6, Qt 5.11 et la nouvelle syntaxe pour les signaux et slots. Ca compile bien.
    Images attachées Images attachées  
    Dernière modification par Jack ; 05/07/2018 à 12h31.

  7. #37
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    En ouvrant le fichier .pro, (généré automatiquement quand l'ai créé le 'nouveau projet',"Application avec widgets".... je trouve
    QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    Est-ce ça qui force en version ancienne?

    Autre question qui m'embarasse:
    Comment accéder, depuis des objets quelconques (ex un thread, ou un 'truc' déclaré par moi, ....)
    aux propriétés ou fonctions d'objets créés par QT Designer?

    Par exemple, comment une fonction Truc::fonction(machin, chose....) peut-elle écrire un texte dans un objet QTextEdit, de nom text_Edit, appartenant à MainWindow?
    l'instruction bête
    text_Edit.setPlainText("çamarc he!") est refusée: soit l'objet textEdit hors de la fonction constructeur de MainWindow fait planter, soit , déclaré dans le constructeur, c'est normal qu'il ne soit pas reconnu en dehors, depuis le 'truc'....
    Je n'arrive pas à y accéder depuis l'instance de MainWindow (qui doit avoir 'w' pour identifiant....mais me semble seulement dans la portée de 'main( )' ????)
    #include "mainwindow.h"
    #include <QApplication>
    int main(int argc, char *argv[])
    { QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
    }
    Si c'est possible, que faudrait-il écrire comme instruction dans une fonction de 'truc' ?
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  8. #38
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Tu peux accéder aux widgets dans la classe MainWindow grâce à l'objet ui (regarde le code du constructeur de mainWindow).
    ui->textEdit.SetText("hello");

  9. #39
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    l'objet "ui" ne serait pas déclaré (???)
    /boitexte_controleur/mainwindow.cpp:39: erreur : 'ui' was not declared in this scope
    ui->textEdit.SetText("hello");
    et pourtant:
    mainwindow.cpp:..............
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    { ...........
    idem pour la 'boite texte' rajoutée (avec l'interface graphique accédant aux 'formulaires' et à mainwindow.ui ( en 'QML ?))
    nom_du_widget_QTextEdit.setPla inText("waked Up !");
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  10. #40
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Citation Envoyé par Bounoume Voir le message
    l'objet "ui" ne serait pas déclaré (???)
    Si justement, c'est ce que je te faisais remarquer car j'avais constaté que tu ne faisais pas référence à ui, donc aucune chance que la ligne textEdit.setPlainText("ça marche!"); fonctionne.
    Il faut donc écrire ui->textEdit.setPlainText("ça marche!");

  11. #41
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    Citation Envoyé par Jack Voir le message
    Si justement, c'est ce que je te faisais remarquer car j'avais constaté que tu ne faisais pas référence à ui, donc aucune chance que la ligne textEdit.setPlainText("ça marche!"); fonctionne.
    Il faut donc écrire ui->textEdit.setPlainText("ça marche!");
    QT: il veut pas, le bourrin....

    première config, l'instruction dans un objet QTextEdit (celui où je voudrais écrire 1 texte)
    Capture du 2018-07-07 17-15-26.png.zip
    deuxième config, dans une méthode de MainWindow(pour voir)
    Capture du 2018-07-07 17-20-12.png.zip
    pourtant ..... comme dans la doc Assistant sur UI tools, il y a bien
    #include "ui_mainwindow.h" dans le .cpp (et j'ai rajouté la même chose dans le .h ...)

    si tu peux trouver le lézard......
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  12. #42
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Poste les images directement dans leur format d'origine si possible.

    Je veux bien tester si tu me renvoies à nouveau le projet zippé.

  13. #43
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    bonsoir Jack,
    il y a un progrès:
    avec la syntaxe que tu indiques, le
    ui->textEditKernelState->setPlainText("xxxx ");
    est accepté...... dans le constructeur de l'objet w de classe MainWindow (ai-je bien compris ça?)
    il me semble aussi que ce sont bien les fonctions des widgets de la fenêtre w MainWindow qui sont connectés aux slots de mon thread...

    Par contre pas moyen d' accéder aux fonctions de ces widgets depuis l'objet thread (pour écrire dans l'inteface graphique les retours des actions effectuées dans le thread)......
    le 'ui->' n'est pas reconnu à l'intérieur d'une fonction de Thread1.
    Voici les sources:
    'avec 2 variantes en +; pour essayer de comprendre: Ui, c'est 1 namespace, mais 'ui', c'est quoi? un pointeur sur instance de QWindow?

    boitexte_controleur_re.zip

    Comment faire pour accéder aux widgets depuis 1 fonction quelconque d'un objet quelconque?
    merci d'avance
    Dernière modification par Bounoume ; 09/07/2018 à 22h46.
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  14. #44
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Par contre pas moyen d' accéder aux fonctions de ces widgets depuis l'objet thread (pour écrire dans l'inteface graphique les retours des actions effectuées dans le thread)......
    le 'ui->' n'est pas reconnu à l'intérieur d'une fonction de Thread1.
    Normal, puisque ui est un membre privé de la classe mainWindow:
    Code:
    classMainWindow:publicQMainWindow
    {
        Q_OBJECT
    
    
    public:
        explicitMainWindow(QWidget*parent=0);
        ~MainWindow();
    
    
    private:
        Ui::MainWindow*ui;//VOUAIS.....mais alors on peut pas l'appeler de l'extérieur!!!!
    };
    VOUAIS.....mais alors on peut pas l'appeler de l'extérieur!!!!
    C'est le principe des membres privés. Il vaut mieux éviter de laisser faire n'importe quoi avec la gestion de l'interface graphique et forcer son utilisateur à utiliser les fonctions qui vont bien et qui ne vont rien "casser".
    Comment faire pour accéder aux widgets depuis 1 fonction quelconque d'un objet quelconque?
    Je n'ai jamais essayé, mais si j'avais à le faire j'enverrais un signal depuis le thread vers un slot de mainWindow.

  15. #45
    Bounoume

    Re : QTCreator..., C++, signal et slots:

    ça y est!
    l'ancienne syntaxe est acceptée..... et l'exécution est correcte.
    A une condition encore: que les 'connect' soient placés
    évidement dans une fonction de mainwindow (en l'occurrrence le constructeur) .... sinon pas moyen d'accéder à ui->......

    mais aussi faut le placer APRES le
    ui->setupUi(this); sinon
    il y a erreur à l'exécution

    merci pour ça, et pour m'avoir fait comprendre que:
    dans l'objet possesseur, dans l'en-tête, parmi les 'public:'
    dans la déclaration du signal, (énumération des arguments ) faut donner seulement le type des arguments, sans les faire suivre d'un nom de variable,comme j'ai l'habitude dans 1 déclaration normale
    dans la déclaration du slot par contre pour chaque argument, faut bien donner 1 type ET 1 nom de variable (qui servira dans l'implémentation des calculs de la fonction dans le source .cpp)
    et puis.....
    par contre dans les connect (ancienne syntaxe) il ne faut ni donner des noms aux arguments du slot (normal, on n'e a pas déclaré pour l'objet concerné, dans le .h)......
    mais aussi et( surtout on ne répète pas les noms des arguments de SLOT(fonction(.......))



    Et à un moment,( pour faire sérieux...) j'avais eu la mauvaise idée de re-déclarer une implémentation (vide) d'un signal dans le .cpp..... ce que tu m'as dit de ne jamais faire....

    Avant de tomber sur les bons exemples... et de les assimiler..... ce n'est pas évident!
    A priori, l'affaire est résolue.
    Remerciements, et à la prochaine!
    rien ne sert de penser, il faut réfléchir avant.... (Pierre Dac...)

  16. #46
    Jack
    Modérateur

    Re : QTCreator..., C++, signal et slots:

    Heureux que cela fonctionne.
    Ca n'est pas normal toutefois que la nouvelle syntaxe ne s'applique pas.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. QTCreator: application QT-avecwidget: accès librairies standard?
    Par Bounoume dans le forum Programmation et langages, Algorithmique
    Réponses: 26
    Dernier message: 31/05/2018, 22h42
  2. Démineur sur QTcreator
    Par Lucas1836 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 23/10/2015, 23h59
  3. Problème affichage avec Qtcréator
    Par foudefoot dans le forum Programmation et langages, Algorithmique
    Réponses: 13
    Dernier message: 22/06/2014, 23h09
  4. GSM : Uplink/downlink : Décalage de 3 slots ?
    Par inviteb2e92e68 dans le forum Physique
    Réponses: 0
    Dernier message: 03/12/2009, 22h30
  5. Slots PCI sur un serveur
    Par invitef6dc9e38 dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 11/10/2007, 21h09