本文介绍的是关于分析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手机应用移植注意事项的内容讲完了,以上也是我们常见的问题,希望本文对你有引导性的帮助。