• Qt 子对象引用mainwindow指针的巧妙方法


    问题描述:最近在用qt开发项目的时候,有一个需要就是在子类中调用mainwindow指针,在mainwindow上显示内容。

    因为在mainwindow中需要生成子类的对象,所以不能在子类中引用mainwindow的头文件,这样会造成相互包含报错!

    后来查到大家推荐使用parentWidget这个方法,然而在我的项目中该函数返回的却是一个nullptr,这就让人郁闷了!

    不过好在还是有办法可以解决的:

    在子类的头文件中我并没有引用mainwindow的头文件,而是先定义了一个void指针

    cpp文件中,在构造函数中将接收到的父对象强转为mainwindow类型的指针,这样就完美解决问题,就可以在子类中开心的调用mainwindow中的成员函数了。

     有一点需要提醒和我一样白的小白的是,这句引用要放在子类的cpp文件中。

    然而,怎么使用这个指针呢?

     将void* 强转为 mainwindow* 就可以使用了。

    上述做法的原因是:指针变量的意义是存储内存块的首地址,只不过在使用的时候对于不同类型的指针所操作的内存长度不同,

    另外,为什么可以用void*呢?因为void* 可以转化为任何类型的指针,而其他则不可以转void*,举个例子:你可以说猫咪是动物,但不可以说动物是猫咪,嘻嘻,现在懂了吧!

    所以我们在使用的时候需要将void* 转为 mainwindow* ,这样就可以按照mainwindow在内存中的规则来操作了。

    虽然这样解决了问题,但是我还是觉得这样可能不是一个完美的解决办法,希望有更好的解决办法的小伙伴给个留言!

  • 相关阅读:
    FastReport报表控件使用技巧总结
    WinAPI: ShellExecute
    Delphi Excel 操作大全
    DATEADD和DATEDIFF函数、其他日期处理方法 、已打开的端口、FORMAT函数
    javascript-时间戳
    js-jquery-插件开发(二)【最终插件是最后一个,中间是过程】
    js-jquery-插件开发(一)
    Java-idea-eclipse-快捷键【mac,win】
    Java-idea-生成for循环
    Java-idea-设置类头注释和方法注释
  • 原文地址:https://www.cnblogs.com/jiguang321/p/11692736.html
Copyright © 2020-2023  润新知