問題描述:最近在用qt開發項目的時候,有一個需要就是在子類中調用mainwindow指針,在mainwindow上顯示內容。
因為在mainwindow中需要生成子類的對象,所以不能在子類中引用mainwindow的頭文件,這樣會造成相互包含報錯!
后來查到大家推薦使用parentWidget這個方法,然而在我的項目中該函數返回的卻是一個nullptr,這就讓人郁悶了!
不過好在還是有辦法可以解決的:
在子類的頭文件中我並沒有引用mainwindow的頭文件,而是先定義了一個void指針

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

有一點需要提醒和我一樣白的小白的是,
這句引用要放在子類的cpp文件中。
然而,怎么使用這個指針呢?

將void* 強轉為 mainwindow* 就可以使用了。
上述做法的原因是:指針變量的意義是存儲內存塊的首地址,只不過在使用的時候對於不同類型的指針所操作的內存長度不同,
另外,為什么可以用void*呢?因為void* 可以轉化為任何類型的指針,而其他則不可以轉void*,舉個例子:你可以說貓咪是動物,但不可以說動物是貓咪,嘻嘻,現在懂了吧!
所以我們在使用的時候需要將void* 轉為 mainwindow* ,這樣就可以按照mainwindow在內存中的規則來操作了。
雖然這樣解決了問題,但是我還是覺得這樣可能不是一個完美的解決辦法,希望有更好的解決辦法的小伙伴給個留言!
