不通过Qt Mobility操纵Symbian设备的相机
| Line 1: | Line 1: | ||
| + | [[Category:Qt]][[Category:Qt for Symbian]] | ||
== 概述 == | == 概述 == | ||
标准Qt API没有为我们提供操纵Symbian设备的相机的接口,包括现在的Qt Mobility 1.0.2也没有为我们提供相应的接口。Qt Mobility 1.1倒是包含了camera的部分,不过现在的Qt Mobility 1.1还只是一个Technology Preview版本。 | 标准Qt API没有为我们提供操纵Symbian设备的相机的接口,包括现在的Qt Mobility 1.0.2也没有为我们提供相应的接口。Qt Mobility 1.1倒是包含了camera的部分,不过现在的Qt Mobility 1.1还只是一个Technology Preview版本。 | ||
| Line 8: | Line 9: | ||
== 将API源码加入工程 == | == 将API源码加入工程 == | ||
| − | + | 首先,解压附件testOfCameraApiOnN8.zip 得到testOfCameraApiOnN8文件夹,将testOfCameraApiOnN8文件夹里的cameraX文件夹整体拷贝到当前Qt工程的根目录。<br> | |
然后修改pro文件,将API源码添加进去:<br> | 然后修改pro文件,将API源码添加进去:<br> | ||
<code cpp> | <code cpp> | ||
| − | SOURCES += | + | SOURCES += cameraX\xqviewfinderwidget.cpp \ |
| − | + | cameraX\xqviewfinderwidget_p.cpp \ | |
| + | cameraX\xqcamera.cpp \ | ||
| + | cameraX\xqcamera_p.cpp\ | ||
| + | cameraX\xqutils.cpp \ | ||
| + | cameraX\xqutils_p.cpp \ | ||
| + | cameraX\xqconversions.cpp | ||
| − | HEADERS += | + | HEADERS += cameraX\xqviewfinderwidget.h \ |
| − | + | cameraX\xqviewfinderwidget_p.h \ | |
| + | cameraX\xqcamera.h \ | ||
| + | cameraX\xqcamera_p.h \ | ||
| + | cameraX\xqutils.h \ | ||
| + | cameraX\xqutils_p.h \ | ||
| + | cameraX\xqconversions.h | ||
| + | </code> | ||
| + | 接着继续修改pro文件,把API所用到的公共Symbian库文件添加进去: | ||
| + | <code cpp> | ||
| + | LIBS += -lfbscli\ | ||
| + | -lapmime \ | ||
| + | -lcommonui \ | ||
| + | -lplatformenv \ | ||
| + | -lcharconv | ||
</code> | </code> | ||
| − | == | + | == 将API所依赖的CameraWrapper加入SDK和device == |
| − | + | 由于API中用到了并未加入公版SDK的Symbian库,所以我们需要手动加入,不过也很简单,我们可以让程序在编译的时候自动替我们加上。<br> | |
| + | 首先将testOfCameraApiOnN8文件夹里的cameraengineWrapper文件夹整体拷贝到当前Qt工程的根目录。<br> | ||
| + | 首先向SDK加入所依赖的头文件和库:<br> | ||
| + | <code cpp> | ||
| + | BLD_INF_RULES.prj_exports += \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\include\cameraengine.h \epoc32\include\cameraengine.h" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\include\cameraengineobserver.h \epoc32\include\cameraengineobserver.h" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper.dso \epoc32\release\armv5\lib\camerawrapper.dso" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper.lib \epoc32\release\armv5\lib\camerawrapper.lib" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper{000a0000}.dso \epoc32\release\armv5\lib\camerawrapper{000a0000}.dso" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper{000a0000}.lib \epoc32\release\armv5\lib\camerawrapper{000a0000}.lib" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\urel\camerawrapper.dll \epoc32\release\armv5\urel\camerawrapper.dll" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\armv5\urel\camerawrapper.dll.map \epoc32\release\armv5\urel\camerawrapper.dll.map" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\CamAutoFocus.dll \epoc32\release\winscw\udeb\CamAutoFocus.dll" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\camerawrapper.dll \epoc32\release\winscw\udeb\camerawrapper.dll" \ | ||
| + | "cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\camerawrapper.lib \epoc32\release\winscw\udeb\camerawrapper.lib" \ | ||
| + | |||
| + | </code> | ||
| + | 然后将CameraWrapper一起打包入SIS:<br> | ||
| + | <code cpp> | ||
| + | cameraengineEmbeddedsis.pkg_postrules = "@\"cameraengineWrapper\InstallToDevice\camerawrapper.sisx\",(0x2001EC5F)" | ||
| + | DEPLOYMENT += cameraengineEmbeddedsis | ||
| + | </code> | ||
| + | 最好将CameraWrapper库链接到我们的Qt工程:<br> | ||
<code cpp> | <code cpp> | ||
| − | LIBS += - | + | LIBS += -lcamerawrapper |
</code> | </code> | ||
| − | == | + | == 在代码中使用camera API == |
| − | + | 好了,经过上述步骤,我们终于成功的做完了所有准备工作,下面就可以使用这个camera API了。<br> | |
首先在需要使用的地方引入API头文件 | 首先在需要使用的地方引入API头文件 | ||
<code cpp> | <code cpp> | ||
| Line 51: | Line 93: | ||
== 测试设备 == | == 测试设备 == | ||
| − | + | 本代码已通过在N97上的测试。<br> | |
| − | + | 下面是程序在N97上运行时的截图:<br> | |
| − | + | ||
[[File:camera.JPG]] | [[File:camera.JPG]] | ||
Revision as of 11:56, 5 September 2010
Contents |
概述
标准Qt API没有为我们提供操纵Symbian设备的相机的接口,包括现在的Qt Mobility 1.0.2也没有为我们提供相应的接口。Qt Mobility 1.1倒是包含了camera的部分,不过现在的Qt Mobility 1.1还只是一个Technology Preview版本。
本文将通过另一种方式为大家提供一种Symbian设备上的Qt camera API,它不使用Qt Mobility,直接封装的是Symbian代码。此camera API的所有源码以及例程都可以通过本文末尾所附链接下载。本例程大部分源码得益于Mobile Extensions for Qt for Symbian,S60 Platform: Camera Example v3.0,以及Liuxg的指导,在此一并表示感谢。
下面就具体为大家讲解如何使用这个camera API。
将API源码加入工程
首先,解压附件testOfCameraApiOnN8.zip 得到testOfCameraApiOnN8文件夹,将testOfCameraApiOnN8文件夹里的cameraX文件夹整体拷贝到当前Qt工程的根目录。
然后修改pro文件,将API源码添加进去:
SOURCES += cameraX\xqviewfinderwidget.cpp \
cameraX\xqviewfinderwidget_p.cpp \
cameraX\xqcamera.cpp \
cameraX\xqcamera_p.cpp\
cameraX\xqutils.cpp \
cameraX\xqutils_p.cpp \
cameraX\xqconversions.cpp
HEADERS += cameraX\xqviewfinderwidget.h \
cameraX\xqviewfinderwidget_p.h \
cameraX\xqcamera.h \
cameraX\xqcamera_p.h \
cameraX\xqutils.h \
cameraX\xqutils_p.h \
cameraX\xqconversions.h
接着继续修改pro文件,把API所用到的公共Symbian库文件添加进去:
LIBS += -lfbscli\
-lapmime \
-lcommonui \
-lplatformenv \
-lcharconv
将API所依赖的CameraWrapper加入SDK和device
由于API中用到了并未加入公版SDK的Symbian库,所以我们需要手动加入,不过也很简单,我们可以让程序在编译的时候自动替我们加上。
首先将testOfCameraApiOnN8文件夹里的cameraengineWrapper文件夹整体拷贝到当前Qt工程的根目录。
首先向SDK加入所依赖的头文件和库:
BLD_INF_RULES.prj_exports += \
"cameraengineWrapper\InstallToSDK\epoc32\include\cameraengine.h \epoc32\include\cameraengine.h" \
"cameraengineWrapper\InstallToSDK\epoc32\include\cameraengineobserver.h \epoc32\include\cameraengineobserver.h" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper.dso \epoc32\release\armv5\lib\camerawrapper.dso" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper.lib \epoc32\release\armv5\lib\camerawrapper.lib" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper{000a0000}.dso \epoc32\release\armv5\lib\camerawrapper{000a0000}.dso" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\lib\camerawrapper{000a0000}.lib \epoc32\release\armv5\lib\camerawrapper{000a0000}.lib" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\urel\camerawrapper.dll \epoc32\release\armv5\urel\camerawrapper.dll" \
"cameraengineWrapper\InstallToSDK\epoc32\release\armv5\urel\camerawrapper.dll.map \epoc32\release\armv5\urel\camerawrapper.dll.map" \
"cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\CamAutoFocus.dll \epoc32\release\winscw\udeb\CamAutoFocus.dll" \
"cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\camerawrapper.dll \epoc32\release\winscw\udeb\camerawrapper.dll" \
"cameraengineWrapper\InstallToSDK\epoc32\release\winscw\udeb\camerawrapper.lib \epoc32\release\winscw\udeb\camerawrapper.lib" \
然后将CameraWrapper一起打包入SIS:
cameraengineEmbeddedsis.pkg_postrules = "@\"cameraengineWrapper\InstallToDevice\camerawrapper.sisx\",(0x2001EC5F)"
DEPLOYMENT += cameraengineEmbeddedsis
最好将CameraWrapper库链接到我们的Qt工程:
LIBS += -lcamerawrapper
在代码中使用camera API
好了,经过上述步骤,我们终于成功的做完了所有准备工作,下面就可以使用这个camera API了。
首先在需要使用的地方引入API头文件
#include "xqvibra.h"然后创建一个XQVibra的对象。例如:
XQVibra m_vibra;然后就可以使用它了,使用是非常直观和方便的,例如:
m_vibra.start(ui->sliderDuration->value() * 100); //开始震动,参数为int型,代表持续时间,单位为毫秒
m_vibra.stop(); //停止震动
m_vibra.setIntensity(int); //设置震动强度,范围为-100 ~ +100
并且m_vibra在状态发生改变的时候会发送信号:
void statusChanged(XQVibra::Status status);
共有三种状态,分别是:StatusNotAllowed, StatusOff, StatusOn。
测试设备
本代码已通过在N97上的测试。
下面是程序在N97上运行时的截图:

