J'ai une hiérarchie simple de widgets: GraphWidget -> MotionWidget -> NodeWidget. Je suis nouveau à Qt, donc je ne suis pas tout à fait sûr de la façon dont certains intérieurs fonctionnent encore. Fondamentalement, GraphWidget crée un seul MotionWidget M et définit le parent de M à lui-même. M puis s'en va et crée un tas de NodeWidgets. Cependant, les NodeWidgets ne sont jamais peints et leur fonction paintEvent() n'est pas appelée.Pourquoi QWidget :: paintEvent n'est pas appelé?
J'ai essayé de créer MotionWidget directement, sans GraphWidget et tout fonctionne. Alors pourquoi les choses se cassent si j'ajoute GraphWidget à la hiérarchie?
Voici une pâte avec les bits de code pertinents de mon projet. J'ai également inclus la sortie de GraphWidget :: dumpObjectTree() en haut.
Edit: avez oublié d'inclure le lien de la pâte;) http://rafb.net/p/Zp39CF94.html
Mise à jour: J'enroulai MotionWidget dans une mise en page.
Avant:
GraphWidget :: GraphWidget(QWidget *parent) : QWidget(parent)
{
setFixedSize(500, 500);
MotionWidget *n = new MotionWidget(5, this);
}
Après
GraphWidget :: GraphWidget(QWidget *parent) : QWidget(parent)
{
setFixedSize(500, 500);
QVBoxLayout *l = new QVBoxLayout;
MotionWidget *n = new MotionWidget(5);
l->addWidget(n);
setLayout(l);
}
Maintenant, ce dernier fonctionne. C'est à dire. tout est dessiné. La question devient alors ... Pourquoi? Pourquoi cela n'a-t-il pas fonctionné dans le premier cas, mais a fonctionné dans la seconde?
Est-ce que placer 'this-> setGeometry (parent-> rect())' dans le constructeur MotionWidget supprime le besoin d'une autre disposition? Que faire si vous appelez 'n-> show()' après l'avoir créé? –