×
Namespaces

Variants
Actions
(Difference between revisions)

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

From Nokia Developer Wiki
Jump to: navigation, search
zhouhl (Talk | contribs)
zhouhl (Talk | contribs)
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源码加入工程 ==
首先,解压附件VibraFN.zip 得到VibraFN文件夹,然后将VibraFN文件夹里的VibraX文件夹整体拷贝到当前Qt工程的根目录。<br>
+
首先,解压附件testOfCameraApiOnN8.zip 得到testOfCameraApiOnN8文件夹,将testOfCameraApiOnN8文件夹里的cameraX文件夹整体拷贝到当前Qt工程的根目录。<br>
 
然后修改pro文件,将API源码添加进去:<br>
 
然后修改pro文件,将API源码添加进去:<br>
 
<code cpp>
 
<code cpp>
SOURCES += VibraX\xqvibra.cpp \
+
SOURCES += cameraX\xqviewfinderwidget.cpp \
          VibraX\xqvibra_p.cpp
+
            cameraX\xqviewfinderwidget_p.cpp \
 +
            cameraX\xqcamera.cpp \
 +
            cameraX\xqcamera_p.cpp\
 +
            cameraX\xqutils.cpp \
 +
            cameraX\xqutils_p.cpp \
 +
            cameraX\xqconversions.cpp
  
HEADERS += VibraX\xqvibra.h \
+
HEADERS += cameraX\xqviewfinderwidget.h \
          VibraX\xqvibra_p.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中使用到了Symbian的库,所以我们还有在pro文件中加入:
+
由于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 += -lhwrmvibraclient
+
     LIBS += -lcamerawrapper
 
</code>
 
</code>
  
== 在代码中使用vibra API ==
+
== 在代码中使用camera API ==
做好了前期准备工作,我们下面就可以在代码中使用这个API来控制设备的震动了。
+
好了,经过上述步骤,我们终于成功的做完了所有准备工作,下面就可以使用这个camera API了。<br>
 
首先在需要使用的地方引入API头文件
 
首先在需要使用的地方引入API头文件
 
<code cpp>
 
<code cpp>
Line 51: Line 93:
  
 
== 测试设备 ==
 
== 测试设备 ==
本代码已通过在N97和N8上的测试。<br>
+
本代码已通过在N97上的测试。<br>
同时测试还表明N8震动的灵敏度要优于N97。<br>
+
下面是程序在N97上运行时的截图:<br>
下面是程序在N8上运行时的截图:<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 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

228 page views in the last 30 days.