記一次耗時半天才解決的bug,我的圖標到底去哪了?
昨天我遇到了一個很奇怪的bug,事情經過是這樣的,我用Qt編寫了一個動態庫,這里稱之為lib,lib中有多個界面,相應的我也在這些界面中加了一些圖標。首先,我是在Windows下使用Qt MSVC編譯器編譯的,libA編譯完成以后,我通過另一個程序(這里稱之為app)來調用它,在app中通過調用lib的接口來顯示lib中的界面,此時一切正常,界面、圖標、功能都和預期的一樣。
然后我將上述兩個工程拷貝到Linux系統下,使用Qt gcc進行編譯,編譯也沒問題,運行起來界面、功能也一切正常,但是所有的圖標都不顯示。
此時,我并不覺得是什么大問題,感覺馬上就能解決掉,于是我先檢查了一下資源是否拷貝完整,然后執行qmake,再重新構建。運行一下,問題還在。
還是不慌,此時我想明確一下問題是出在動態庫lib上還是應用程序app上,于是我就用Qt新建了一個界面程序,添加庫lib,包含頭文件,然后接口調用,編譯運行后,圖標都顯示正常,沒有出現任何問題。于是就確定了問題出在了app上。
然后我就去檢查了一下依賴庫,是不是缺少imageformats文件夾,沒發現問題。于是就開始檢查代碼。因為我在app中使用了qss進行樣式的設置,以我以前的經驗來看,可能是樣式表再作怪,如是我注釋了樣式表設置代碼,編譯運行后,問題還在。
代碼查來查去,沒發現什么問題,于是開始重新梳理思路。圖標不顯示,要么是資源問題,要么是依賴的問題,通過上面的檢查過程可以確定依賴沒問題,只能是資源出了問題。我的所有資源都添加在images.qrc中,我將images.qrc中的所有圖片資源全部刪除,然后重新添加,再次編譯后,問題還是沒解決。
奇了個大怪,怎么會這樣,不信邪的我,又打開了上面剛創建的測試動態庫是否正常的工程,添加Qt資源文件,按照習慣命名為images,然后往里面添加相同的圖片,然后編譯運行,動態庫中的界面談了出來,但是圖標不見了。問題就出現在這個images.qrc中,離真相已經很近了,心情還有點小激動呢。
那么images.qrc有什么問題呢,首先圖片肯定不會對程序造成影響,那么就是images.qrc本身的原因,再看一下lib下的資源文件也叫images.qrc,難道是重名的原因,將app中的images.qrc改為app_images.qrc,重新編譯運行,圖標出現,問題解決。
至于具體原因,網上也沒查到確切的說法,但是因為只有Linux下有問題,且又是重名時出現,那多少時鏈接出現了錯誤,具體原因待我查到以后,放在評論中。