У меня есть простая иерархия виджетов: GraphWidget -> MotionWidget -> NodeWidget. Я новичок в Qt, поэтому я не совсем уверен в том, как работают некоторые внутренности. По сути, GraphWidget создает один MotionWidget M и устанавливает себе родителя M's . M затем уходит и создает кучу NodeWidgets. Однако NodeWidgets никогда не рисуются, и при этом их функция paintEvent () не вызывается.
Я попытался создать MotionWidget напрямую, без GraphWidget, и все работает. Так почему же все сломается, если я добавлю GraphWidget в иерархию?
Вот вставка с соответствующими битами кода из моего проекта. Я также включил вывод GraphWidget :: dumpObjectTree () вверху.
Редактировать: забыл включить ссылку для вставки;) http://rafb.net/p/Zp39CF94.html
Обновление: я обернул MotionWidget в макет.
До:
GraphWidget :: GraphWidget( QWidget *parent ) : QWidget( parent )
{
setFixedSize( 500, 500 );
MotionWidget *n = new MotionWidget( 5, this );
}
После
GraphWidget :: GraphWidget( QWidget *parent ) : QWidget( parent )
{
setFixedSize( 500, 500 );
QVBoxLayout *l = new QVBoxLayout;
MotionWidget *n = new MotionWidget( 5 );
l->addWidget( n );
setLayout( l );
}
Теперь последнее работает. То есть все обращается. Тогда возникает вопрос ... Почему? Почему это не сработало в первом случае, но сработало во втором?