在aux方法中创建的QWidget不显示/绘制

时间:2013-11-18 18:42:46

标签: c++ qt user-interface qwidget

我有一个基于QWidget的类,我需要从另一个对象实例化。

如果我在其父窗口小部件类的主体中创建窗口小部件,那就很好了:

new NodeWidget(rootItem, this); // this works

但是当我使用aux方法创建小部件时,却从未绘制过。

rootItem->createWidget(this); // internally rootItem does the same thing as above

方法本身:

void createWidget(QWidget * target) {
     if (!_ui) _ui = new NodeWidget(this, target);
...
}

我看到它的方式,两种方法都做同样的事情,但第一种方法有效,而第二种无效。 NodeWidget构造函数会运行,但窗口小部件不会出现在父窗口小部件中,并且从不调用paintEvent。有什么想法吗?

编辑:这当然很奇怪,我注意到以下几行:

new QPushButton(this);

在父窗口小部件的构造函数中调用时有效,但在从mousePress事件调用时则不行。有什么区别?

1 个答案:

答案 0 :(得分:0)

您是否为自定义小部件调用 show()

如果子窗口小部件是在父窗口已显示之后创建的,则父子关系也无法显示子窗口,因此您需要显式调用 show()

但是当构造函数中添加了窗口小部件时,父窗体尚未显示,然后当显示父窗口时,它会自动显示未明确隐藏的所有子窗口。