Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

childAt provoque une erreur fatale



  • Bonjour,

    Il y a un problème à propos de la fonction childAt().

    J'ai un widget principal, lequel contient quelques widgets enfants.
    Quand je fais monWidget->childAt(xmouse, ymouse); je retrouve bien les widgets enfants pointés.
    Mais le programme crash quand je clique sur monWidget à un endroit où il n'y a pas de "child".
    Cette fonction ne retourne ni 0 ni -1, elle crash carrément.

    Je ne vois pas comment contourner ça.
    Aurriez-vous une idée?



  • Lorsque vous cliquez à une position où il n'y a pas d'enfant, childAs(int x, int y) retourne nullptr. Il n'y a pas de crash. Votre crash est probablement causé par la fonction que vous appelez avec le résultat de childAt.

    Par exemple, si vous voulez obtenir la hauteur de l'enfant sur lequel vous avez cliqué, vous faites

    const int height = monWidget->childAt(xmouse, ymouse)->height();
    

    height() provoquera un crash si vous ne cliquez pas sur un enfant valide.
    Le bon code est le suivant :

    int height = -1; // return -1 on invalid click
    QWidget* p = monWidget->childAt(xmouse, ymouse);
    if (p!=nullptr) height = p->height();
    


  • C'était ça.


Log in to reply