Qt 子对象引用mainwindow指针的巧妙方法
问题描述:最近在用qt开发项目的时候,有一个需要就是在子类中调用mainwindow指针,在mainwindow上显示内容。
因为在mainwindow中需要生成子类的对象,所以不能在子类中引用mainwindow的头文件,这样会造成相互包含报错!
后来查到大家推荐使用parentWidget这个方法,然而在我的项目中该函数返回的却是一个nullptr,这就让人郁闷了!
不过好在还是有办法可以解决的:
在子类的头文件中我并没有引用mainwindow的头文件,而是先定义了一个void指针
cpp文件中,在构造函数中将接收到的父对象强转为mainwindow类型的指针,这样就完美解决问题,就可以在子类中开心的调用mainwindow中的成员函数了。
有一点需要提醒和我一样白的小白的是,这句引用要放在子类的cpp文件中。
然而,怎么使用这个指针呢?
将void* 强转为 mainwindow* 就可以使用了。
上述做法的原因是:指针变量的意义是存储内存块的首地址,只不过在使用的时候对于不同类型的指针所操作的内存长度不同,
另外,为什么可以用void*呢?因为void* 可以转化为任何类型的指针,而其他则不可以转void*,举个例子:你可以说猫咪是动物,但不可以说动物是猫咪,嘻嘻,现在懂了吧!
所以我们在使用的时候需要将void* 转为 mainwindow* ,这样就可以按照mainwindow在内存中的规则来操作了。
虽然这样解决了问题,但是我还是觉得这样可能不是一个完美的解决办法,希望有更好的解决办法的小伙伴给个留言!