Please nominate your Qt Champions for 2021! https://forum.qt.io/topic/132134/looking-for-the-2021-qt-champions

Signals et Slots entre objets de classes différentes



  • Bonjour,

    Dans MainWindow j'ai créé un QLabel:

    MainWindow::MainWindow(QWidget *parent)             // arguments
        : QMainWindow(parent)                           // héritage
    {
    ...
        labelPositionNewNav = new QLabel("position",this);
        labelPositionNewNav->setGeometry(QRect(QPoint(2760,10), QSize(430, 50)));
    ....
    }
    

    J'ai par ailleurs un Widget nommé "newNav" dont la descendance est telle que :
    MainWindow > CustomLine > TimeLinePart3 > newNav

    newNav::newNav(QWidget *parent, int typed)
        : QLabel(parent)   // <----------- probleme ici ??
        //: QWidget(parent), QLabel(parent)
    {
        QPainter painter(this);                                                             
    ...
        setPixmap(QPixmap::fromImage(image)); // utilisé par le drag&drop
        
    }
    

    Je n'arrive pas à créer un système de Signal: et Slots: entre newNav et ma fenêtre MainWindow (mon QLabel) sans doute à cause du fait que newNav n'hérite pas de QObject ou QWidget.
    Je n'arrive pas non plus à lui imposer un héritage de type QWidget car sinon la fonction setPixmap n'est plus disponible.

    Comment atteindre mon QLabel à partir de mon newNav ?


  • Lifetime Qt Champion

    Bonjour,

    De quelle classe est newNav ?

    Ceci étant, si newNav est contenu dans TimeLinePart3 qui est lui-même dans CustomLine, la technique usuel est d'avoir une API dans le widget le plus haut (CustomLine dirait-on) qui transmettra plus bas. Car au final, il ne semble pas qu'il y ait de raisons que MainWindow ait besoin d'avoir connaissance d'un label qui se trouve derrière deux autres classes.



  • Non :

    • mon QLabel appartient directement à MainWindow
    • mes objets newNav sont de classe newNav::

    Ce que je sais faire c'est récupérer la position d'un newNav dans son parent TimeLinePart3.
    Ce que j'aimerais c'est faire remonter cette valeur de position vers le haut, vers MainWindow pour pouvoir l'afficher dans le QLabel.

    Peut-être puis-je vous zipper mon code pour que vous puissiez vous rendre compte de la chaine imbriquée mise en jeu.

    Pour info.
    La création d'un newNav se fait avec : SHIFT + ClicDroit ou CTRL+ClicDroit
    Le basculement de type se fait par Clic Gauche

    link text

    Le code a été écrit sous Debian.
    Les liens vers les fichiers sont non relatif donc ça ne fonctonnera pas en l'état.


  • Lifetime Qt Champion

    Donc c'est à TimeLinePart3 de transmettre l'information plus haut à CustomLine qui pourra être connecté au label ou en fonction de l'information transmise le slot devrait être dans MainWindow pour mettre à jour le label.


Log in to reply