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

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

由於在mainwindow中須要生成子類的對象,因此不能在子類中引用mainwindow的頭文件,這樣會形成相互包含報錯!spa

後來查到你們推薦使用parentWidget這個方法,然而在個人項目中該函數返回的倒是一個nullptr,這就讓人鬱悶了!指針

不過好在仍是有辦法能夠解決的:對象

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

 

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

 

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

 

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

 

 將void* 強轉爲 mainwindow* 就可使用了。qt

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

另外,爲何能夠用void*呢?由於void* 能夠轉化爲任何類型的指針,而其餘則不能夠轉void*,舉個例子:你能夠說貓咪是動物,但不能夠說動物是貓咪,嘻嘻,如今懂了吧!

因此咱們在使用的時候須要將void* 轉爲 mainwindow* ,這樣就能夠按照mainwindow在內存中的規則來操做了。

雖然這樣解決了問題,可是我仍是以爲這樣可能不是一個完美的解決辦法,但願有更好的解決辦法的小夥伴給個留言!

相關文章
相關標籤/搜索