分析Qt Symbian手機應用移植注意事項
本文介紹的是關于分析Qt Symbian手機應用移植注意事項,做過移植的朋友們應該了解,在移植過程中,出現很多的問題,那么本文將會幫你分析問題的原因。
在Linux和Windows上做過開發的朋友,可能會發現在把應用移植到手機上的時候,不是那么符合手機上的用戶使用習慣。而且很多培訓教材在講授Qt 的時候也是針對桌面應用的,對于初學者如果依照培訓材料上的例子直接編譯成手機版本,也會碰到這個問題。在此我把幾個經常碰到的問題整理一下。
QWidget 還是QMainWindow
QMainWindow和QWidget的區別是QMainWindow包含工具欄、狀態欄以及 菜單等,對于手機應用來說可見的最大區別是菜單,也就是左下角的那個”Options”選項。
所以,如果你的應用較復雜,需要用到菜單處理的時候請使用QMainWindow做為你應用的主窗 口。使用QMainWindow的時候,初學者往往會碰到另一個問題,就是在往QMainWindow里增加新的控件,并使用QLayout來管理這些控 件的時候,經常不能成功。原因是QMainWindow有它自己的布局管理器,如果需要在QMainWindow中增加新控件和布局時,可以通過 QMainWindow::setCentralWidge(QWidget *)給QMainWindow的主界面設定一個QWidget *cw,然后在cw中定義自己的布局和控件。
定制Options菜單
可以通過QMainWindow::newMenuBar()函數獲得主窗口的菜單欄(如果沒有菜單欄,則創建一個并返回 指針),為菜單欄增加子項可以用addMenu()或者addAction().如果沒有子菜單項推薦直接使用addAction,因為如果QMenu無 法直接對外部事件做出響應。
定制系統softkey內容
在一個應用有多個視圖的時候,如果系統的softkey(就是屏幕下邊的軟鍵)總是顯示”Options”和”Exit”則無法應用需求,比如離開主界面后, 需要將”Exit“變成”Back”。通過將一個QACtion的setSoftKeyRole()函數可以將QAction綁定到softkey上,同 時QAction的文本/text()也會顯示到softkey上。當前softkey的上下文和當前具有輸入焦點的控件相關。
如果需要給定制的softkey增加子選項,則可以通過QAction::setMenu()來實 現。
窗口最大化
大部分的”Hello,World”例子里有使用了show()函數來讓窗口顯示,但是在手機系統上,我推薦使用showMaximized(),也就是最大 化。
這樣做首先保證了窗體被顯示出來的時候,屏幕上的 背景部分還有其它應用露出來,容易導致誤操作
此外,如果使用了showMaximized(),在手機從橫向放置變成豎向放置時(或反之),手 機屏幕變化時,應用窗口也會自動進行調整。而如果使用的是show()函數,在手機水平位置發生變化時,應用窗口還是保留原來的大小,有可能導致窗口超出 屏幕,或在屏幕上留下沒有覆蓋的區域。
多窗口應用開發
復雜的應用會有多 個視圖,如果在桌面系統上開發我們可以選擇在一個QMainWindow里通過MDI管理多個子窗口,但是對于手機屏幕空間相對局限的情況下并不是很適 合,手機應用需要在每個視圖都保持最大的界面空間,通過某種方法實現不同視圖直接的切換是比較好的方法。
QSatckedWidget和 QStackedLayout
要管理多個視圖的切 換,Qt提供了兩個方便的類。QStackedWidget和QSatckedLayout,區別在于QSatckedWidet繼承于QWidget是 可視控件,而QStackedLayout繼承于QLayout,僅僅負責布局。
每個被加入到QStackedWidget或QStackedLayout的控件視圖都會獲得一個 索引號(index),QStackedWidget或QStackedLayout可以通過setCurrentIndex來指定當前被顯示的是哪一個 控件視圖。
在QStackedWidget/QStackedLayout中的當前顯示視圖發生變化時,會發 出一個currentChanged(int)的信號,開發者可以利用這個信號去吃執行相應的操作,比如更新當前的上下文菜單或softkey(前面小節 有介紹),以及根據當前視圖更改窗口標題等。
小結:關于Qt Symbian手機應用移植注意事項的內容講完了,以上也是我們常見的問題,希望本文對你有引導性的幫助。