QT 画图时在按钮的槽函数中创建对象,点击按钮时,paintevent就不会执行是怎么回事

我想做一个游戏,在dialog的子类里定义游戏窗口包括相关按钮,然后把自定义一个画图类B(继承自widget),用于游戏的具体实现(包括绘图)。
我在dialog的子类里生命声明了类B的指针,并在该构造函数里创建对象,然后在类B实现paintevent,这就在dialog的子类里的窗口上能绘图,-----但是在相关按钮中创建对象,然后在dialog的子类窗口就不能绘图,发现paintevent没有调用,这是为什么呢,是不是画图类B的对象必须在窗口类的构造函数中创建啊???

因为在构造函数创建时,主调用(父类)还未执行 show();全部构建后才执行showEvent(); 这时,子类也执行了showEvent(); 所以能显示。
但是你在按钮的槽函数创建子类,这时父类已经show了,不再执行showEvent(); 子类也就不会自动执行showEvent();所以看不到。

结论:
你在创建子类后,添加一行: wgt->show(); 假设子类名称(wgt);

考虑一下,是否是以下问题
如果父类实现了paintEvent ,需要在函数标签后面加override,提示覆盖
是否考虑了QPainter的生命周期
是否成功构造了绘图窗口,且窗口大小不为(0,0)