У меня есть простая иерархия виджетов: GraphWidget -> MotionWidget -> NodeWidget. Я новичок в Qt, поэтому пока не совсем уверен в том, как работают некоторые внутренности. По сути, GraphWidget создает один виджет MotionWidget M и устанавливает родительский элемент M в себя. Затем 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 );
}
Теперь последний работает. т.е. все рисуется. Тогда возникает вопрос... Почему? Почему в первом случае не сработало, а во втором сработало?
this->setGeometry(parent->rect())в конструкторе MotionWidget необходимость в другом макете? Что, если вы вызоветеn->show()после его создания? - person Judge Maygarden   schedule 12.03.2009