×
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

276 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×