前兩天看一個師弟開始用Qt寫symbian程式,中間遇到一些問題過來問題,我解決後順便看了下他的開發流程,感覺還是有那麼點問題的。
問題描述:他開發都是在carbide中先建立一個Qt工程,然後在這裡邊寫代碼,在symbian模擬器上調試。 這樣的確是正確的,但是存在兩個問題:
問題一:在symbian下調試太過麻煩,還要啟模擬器啊什麼的,實在沒有在windows底下調試速度和方便。
問題二:這樣建立的Qt工程的pro工程檔案 寫的很“專一”,其只能在symbian底下使用,而不能在別的平台下使用(因為在pro檔案中加了一些symbian特有的檔案,像rss檔案等。),這顯然違反了Qt的跨平台原則,直接將它限定在某一平台下。
鑒於以上兩點,我很討厭這個系統提供的架構!一般我是如下解決的:
1:不要使用Qt for symbian建立GUI工程產生的架構。而要使用Qt for windows建立工程的架構。因為在windows底下產生的架構中的pro工程檔案中:只有cpp和h程式源檔案,這些是和平台無關的,所以完全可以跨平台!
如下是一個Qt for windows產生的pro檔案的內容
TARGET = Qttest
TEMPLATE = app
SOURCES += main.cpp/
mainwindow.cpp
HEADERS += mainwindow.h
可見這個工程檔案完全是跨平台的,而不是與某一平台綁定。同時這樣的話:這個工程完全可以先在windows底下調試好,然後直接拿到carbide上編譯一下就可以裝手機上了,不需要你一直在symbian模擬器上調試,這樣調試速度快多了!
2:接下來可能有人要問了,我該如何匯入到carbide中呢把上邊這個工程?其實carbide可以直接匯入pro檔案,但是我沒有這樣用過,我總覺得這樣不正宗,呵呵~~因為carbide這個IDE是針對symbian的,其“正統”上匯入的工程檔案應該是symbian特有的bld.inf檔案,而不是pro。 那有沒有辦法把Qt的pro工程檔案對應轉成symbian的bld.inf工程檔案呢? 答案是有的,之需要如下做即可:
首先開啟command line,cd到你所建工程的pro檔案所在目錄;
而後運行命令:qmake -platform symbian-abld 這條命令就會將Qt的pro工程檔案轉成symbian的bld.inf工程檔案
而後我們只需要開啟carbide直接按照symbian的標準流程來匯入上邊產生的bld.inf工程檔案即可!
3:現在還有一個問題,可能有人會問:那有一些工程要用到的庫檔案啊,或者源檔案啊是用symbian c++寫成的,這在windows
下肯定無法編譯調試,此時怎麼辦? 其實這也容易:在windows下我們調試的僅僅是Qt那部分代碼,而symbian這部分肯定是無法調試的,那為了區分二者,我們應是在pro檔案裡邊定義一下,舉例如下:
win32 {
HEADERS += ./src/BeEngine.cpp
}
symbian {
SOURCES += ./src/BeEngine.cpp
}
!symbian {
unix {
SOURCES += ./src/BeEngine.cpp
}
}
亦即:我們可以用platform平台關鍵字來區分一些檔案到底是在哪個平台下才會被加到工程中並編譯。上邊比較有意思的是最後一種形式,其實官方只是說用unix做關鍵字即可,但是我們試了一下,還是要寫上!symbian才行,可能這是一個系統的BUG吧。
總結:
1: 建一個Qt工程,推薦將各個平台的檔案都在pro中用平台關鍵字區分開,方便在windows底下調試。
2:將一個Qt工程轉為一個vc工程,只要先用命令列轉到pro工程檔案所在目錄,而後運行:qmake -tp vc即可,這樣就會產生一個vcproj這樣的VC工程,而後就像開啟普通的VC工程那樣去操作它即可!
3:將一個Qt工程轉為一個symbian工程,只要先用命令列轉到pro工程檔案所在目錄,而後運行:qmake -platform symbian-abld 即可,這樣就會產生一個bld.inf這樣的symbian工程,而後就像開啟普通的symbian工程那樣去操作它即可!