qt3和qt4兩個版本存在很大的差異,這也給我們使用帶來了很大的挑戰。下面我結合一下我在實際程式設計過程中遇到的問題來總結一下如何更好的使用qt3和qt4兩個版本來進行程式設計。qt的版本不斷更新,現在最新的版本是4.6。
1. 首先是系統平台的差異。在win下,qt3的**已經很少能見到了,而且nokia早就放棄了對qt3的更新和支援。所以目前主要的**都是在qt4下,同時qt3和qt4在win下部署起來也比較方便,這樣也就大大減弱了版本差異對我們的影響。主要還是在**編寫時候由於qt3和qt4類庫的不同給我們帶來的麻煩。在linux下,版本差異對我們的影響就比較大了。由於核心版本,c/c++執行庫的版本不同導致了qt3和qt4開發的程式很難同時執行在同一臺機器上。這個差別不光是在**編寫過程中,同時還包括程式執行環境。以及qt所依賴的動態庫。
2. qt3和qt4帶來的版本差異。 qt4帶來了很大的改進,新加入了很多的類,同時也在原有的類的基礎上增刪了很多方法或屬性,這樣就給我們程式設計帶來的很大的挑戰。qt3不支援qrc資源檔案、在qdesigner設計的時候會直接編譯成二進位制存放到ui檔案中等等。qt4給我們提供了qt3to4這樣乙個轉換工具,但是這個工具的功能實在是有限的很。許多api函式未能提供轉換。但是有乙個推薦的做法是qt4提供了qt3support庫,使用這個庫可以在qt4下使用大部分qt3的庫,如果我們想要同時編寫適應qt3和qt4的程式,推薦在qt4下使用這個庫。在linux下,qt3是無法呼叫qt4下開發的程式。在執行時雖然可以動態的判斷系統中的環境是qt4還是qt3,但是無法動態載入,因為在linux下,這兩中環境很難共存。
3. 某些控制項的差異。比方說qlabel。在qt3中設定背景的方法是:setpalettebackgroundpixmap方法,而在qt4中是setpixmap方法。由於這是編譯時的差異,所以無法在執行時切換qt的版本。因為api函式不一樣,編譯時候就確定了到底是那種版本的qt。再比方說qthread。在qt4中qthread繼承了qobject類,這樣在qthread中就可以使用q_object來定義signal和slot。但是在qt3中qthread沒有父類,要使用signal和slot就必須讓我們自己的thread類同時繼承qthread和qobject。
4. 解決方法。類似這些問題,我的解決方法是:通過巨集定義在編譯是確定qt的版本。例如:在pro檔案中我們可以判斷出qt使用的版本。 greaterthan(qt_major_version, 4)|equals(qt_major_version,4) defines的功能就是給編譯器新增-d引數,類似於#define qt4 這樣我們就可以在程式共通過這個巨集定義來進行條件編譯了。看thread部分和qlabel部分的**: thread部分: class scanthread : #ifndef qt4 public qobject, #endif public qthread{}; qlabel部分: qpixmap pix(m_imagesrcoff); #ifdef qt4 setpixmap(pix); #else setpalettebackgroundpixmap(pix); #endif 還有一點小經驗,就是在畫按鈕的時候,按鈕的滑鼠經過,滑鼠按下,滑鼠鬆開,都需要變換背景,製作這種複雜的按鈕的時候我們最好是繼承qlabel,qlabel比qpushbutton更加方便我們來繪製控制項的背景。
Qt3和Qt4版本差異帶來的問題和解決方法
qt3和qt4兩個版本存在很大的差異,這也給我們使用帶來了很大的挑戰。下面我結合一下我在實際程式設計過程中遇到的問題來總結一下如何更好的使用qt3和qt4兩個版本來進行程式設計。qt的版本不斷更新,現在最新的版本是4.6。1.首先是系統平台的差異。在win下,qt3的 已經很少能見到了,而且noki...
Qt3和Qt4版本差異帶來的問題和解決方法
qt3和qt4兩個版本存在很大的差異,這也給我們使用帶來了很大的挑戰。下面我結合一下我在實際程式設計過程中遇到的問題來總結一下如何更好的使用qt3和qt4兩個版本來進行程式設計。qt的版本不斷更新,現在最新的版本是4.6。1.首先是系統平台的差異。在win下,qt3的 已經很少能見到了,而且noki...
QT3與QT4中uic的使用差異
1 qt3 在qt3中,用designer設計好介面後,使用uic來根據介面生成 檔案,qt3的uic可以自動生成.h和.cpp檔案,假設你在製作乙個名叫demodlg的對話方塊,生成檔名為demodlg.ui的ui檔案,那麼 qt3的uic生成的檔案則是demodlg.h和demodlg.cpp,...