【发布时间】:2009-03-12 13:52:57
【问题描述】:
我有一个简单的小部件层次结构: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 );
}
现在,后者有效。 IE。一切都被绘制出来。那么问题就变成了……为什么?为什么它在第一种情况下不起作用,而在第二种情况下起作用?
【问题讨论】:
-
将
this->setGeometry(parent->rect())放在 MotionWidget 构造函数中会消除对另一个布局的需要吗?如果创建后调用n->show()呢?
标签: c++ user-interface qt widget