自定义的按钮类,自定义构造函数后,按钮无法显示在窗口

    Qt自带对象树,new一个对象将其挂在对象树上就不需要手动delete这个对象了,一般都是在new对象时指定父对象,今天介绍一个QWidget类自带的指定父对象的函数,setParent()。

    注意到这个函数,因为之前自定义了一个按钮类,将其构造函数自定义,一般来说继承QWidget后构造函数是这个样子,下图:

 

     这样在其他的QWidget派生类中声明可以用MainWidget* myWidget = new MainWidget(this)。但如果改变了构造函数例如下图:

 

    这时候声明时就没办法用之前的方式,可以用setParent(this)的方式来指明父对象。

    Note:改变构造函数后,声明按钮对象很容易忘记指明父对象,致使按钮无法显示,尤其是项目较发杂时往往很难想起来这个问题,找也不好找,因为编译器不会报错,解决这个问题也花了我不少时间。

    下面聊聊Qt的回收机制,在网上找了一些资料,大佬们都是从底层内存来讲的,例如”查看QScopedPointer源代码里的注释:把基于栈的内存所有权给堆分配,称之为RAII“之类,储备不够不好理解。从我犯得这个错误来说,基于类来讲,QWidget类中应该有一个数据成员,其派生类继承这个数据成员后,可以用父类的构造函数赋值,也可以用setParent()来赋值,它记录着我们new的对象指针,在程序结束后自动执行delete或delete下层的操作来释放内存。

猜你喜欢

转载自blog.csdn.net/weixin_43466192/article/details/106454827
今日推荐