Qt 子對象引用mainwindow指針的巧妙方法


問題描述:最近在用qt開發項目的時候,有一個需要就是在子類中調用mainwindow指針,在mainwindow上顯示內容。

因為在mainwindow中需要生成子類的對象,所以不能在子類中引用mainwindow的頭文件,這樣會造成相互包含報錯!

后來查到大家推薦使用parentWidget這個方法,然而在我的項目中該函數返回的卻是一個nullptr,這就讓人郁悶了!

不過好在還是有辦法可以解決的:

在子類的頭文件中我並沒有引用mainwindow的頭文件,而是先定義了一個void指針

 

cpp文件中,在構造函數中將接收到的父對象強轉為mainwindow類型的指針,這樣就完美解決問題,就可以在子類中開心的調用mainwindow中的成員函數了。

 

 有一點需要提醒和我一樣白的小白的是,這句引用要放在子類的cpp文件中。

 

然而,怎么使用這個指針呢?

 

 將void* 強轉為 mainwindow* 就可以使用了。

上述做法的原因是:指針變量的意義是存儲內存塊的首地址,只不過在使用的時候對於不同類型的指針所操作的內存長度不同,

另外,為什么可以用void*呢?因為void* 可以轉化為任何類型的指針,而其他則不可以轉void*,舉個例子:你可以說貓咪是動物,但不可以說動物是貓咪,嘻嘻,現在懂了吧!

所以我們在使用的時候需要將void* 轉為 mainwindow* ,這樣就可以按照mainwindow在內存中的規則來操作了。

雖然這樣解決了問題,但是我還是覺得這樣可能不是一個完美的解決辦法,希望有更好的解決辦法的小伙伴給個留言!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM