×
Namespaces

Variants
Actions
Revision as of 11:56, 5 September 2010 by zhouhl (Talk | contribs)

不通过Qt Mobility操纵Symbian设备的相机

From Nokia Developer Wiki
Jump to: navigation, search

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 SymbianS60 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上运行时的截图:
Camera.JPG


下载源码和例子程序

Media:VibraFN.zip

266 page views in the last 30 days.
×