Qt Creator中使用qss對界面美化沒有做用(效果)的問題

  最近在研究qt界面開發,發現使用qss對界面進行美化後效果不錯,要比mfc效率高不少,美化效果也很出色。可是在使用qss文件對界面控件進行美化的過程當中遇到了個很奇葩的問題,困惑了我很久,今晚又遇到了,感受整我的都很差了,問題症狀以下:html

  (1)我在Qt Creator中新建了一個工程,添加qss文件及內容後運行,加載qss文件並運行程序,qss美化效果死活出不來(經檢查,qss內容及加載過程都正確);編輯器

  (2)在Qt Creator中打開一個現有項目,該項目中含有qss文件,能正確加載,在別的電腦上也驗證過美化效果能出來,在我電腦上直接運行也有效果,可是我更改了qss文件的內容後,再運行,全部qss美化效果都沒了。函數

  經過從網上查詢,最終參考別人的意見並本身測試,最終解決,基本肯定是qss編碼問題形成的,解決方案以下:工具

  (1)在項目中選中qss文件,右擊/用...打開/System Editor。以下圖:測試

    

  (2)文件/另存爲/編碼方式選擇ANSI/保存編碼

    

  (3)提示框問是否替換?/是spa

  

  (4)Qt Creator/工具/選項/文本編輯器/行爲/UTF-8 BOM選擇「老是刪除」。code

     

  (5)從新qmake/構建/運行程序,解決了,qss美化效果出來了。htm

緣由分析:blog

  感受是因爲qss編碼問題形成的,個人qss文件是經過在工程目錄下建一個txt文件,而後改成qss文件,再加到工程裏來的,懷疑這個過程當中有編碼不統一問題。在網上搜索了半天只搜到一篇於此相關的文章,感受對我幫助很大,在此表示感謝!網址爲:http://www.vbgudu.com/html/20160628/53209.html。怕之後找不到,特將內容直接貼在下面:

【qss功能須要正確設置編碼才能起做用】

   QT這個庫,無非使用OO對跨平臺作了絕佳的封裝,這其中的主要工做也就是比較繁瑣而已,但並很少麼了不得。惟獨其中提供的QSS功能,讓我感到十分神奇,作出來的效果實在很驚豔,而使用代碼卻又是如此簡單,並且是在長期以來中規中冷冰冰的C++編譯器上提供這些功能,實在是刮過業界一個新風。也讓我認識到,不是什麼功能都是編譯器提供的,編寫庫的人,在普通的編譯器規則上,照樣能夠作出各類驚豔的效果來。

  可是最近碰到一個問題,就是個人QSS設置效果在開發機上好好的,而且本身開的虛擬機上也是好好的,可是公司同事機上死活沒有效果。這個問題疑惑了好久了,今天終於靈光一閃,解決了這個問題。緣由仍是出在QSS文件編碼格式上。出於跨平臺和多語言考慮,我把項目全部源文件都改爲了UTF8+BOM格式,這個QSS文件也不例外(個人QSS文件裏不含有中文字符)。讀取QSS的代碼在main函數裏這樣寫:

        

QFile qss(":/qss/myfile");
qss.open(QFile::ReadOnly); // qss 也要講究是什麼格式的文件讀取
qApp->setStyleSheet(qss.readAll()); 
qss.close();

  我是在中文環境下開發的,因而它按照ANSI格式去讀取QSS文件了,也不知道爲何就沒問題。估計是文件頭上的三個字節EF BB BF都被看成中文讀出來了,而後試圖去匹配QSS自帶關鍵字,都對不上,而後就被忽略了,後面繼續讀取的話,那都是正確的。可是同一個文件一樣的代碼,到西文環境下,可能成功匹配幾個字母,後面的卻再也對不上號,因而就所有忽略了。這就是爲何個人程序QSS效果在同事機子上始終沒有效果的緣由。解決方案是把QSS文件轉成爲ANSI,或者不帶BOM的UTF8格式,從新編譯,而後效果就又從新出現啦。哦,原來這樣啊,QSS文件就不能和ts語言文件同樣作的更內置一點呢?

  另外就是QT對它本身的錯誤控制的很好,不輕易報錯,這裏QSS讀不出來、對不上號不報錯,SIGNAL對SLOT對不上號也不報錯,這究竟是優勢仍是缺點呢?我感受是方便了初級開發者,複雜了對運行時的深度控制判斷。

相關文章
相關標籤/搜索