Qt for S60开发环境全接触

笔者最近比较勤劳, 花了一天的时间把qt-s60的环境安装并测试了一下, 发现还挺有意思, 特此memo。 听说诺X亚内部已经开始使用qt开发程序, 所以各位看官也要抓紧拉, 如果你掌握了这门技术, 没准儿以后就能在诺X亚大颚家里谋个一官半职……后半辈子就不用愁了,呵呵~

网上关于Qt For S60的安装和配置已经有了一些现成的文章, Qt文档里也有一些内容, 但笔者感觉还是比较零散不够系统, 一方面语言的问题, 另一方面找起来太废力气。 本文算是集大成,哈哈(吹一把)~ 加张图,证明吹牛只是咱的副业……

05062009004

废话少说, 下面就开始。

开发过程需要用到的软件包及其主要作用

Windows环境
需要一台装有Windows的机器, 虚拟机也可, 但要内存分配1G及以上, 太少了不行。 笔者使用虚拟机装Windows XP, 内存1G。 C盘保证5G以上的剩余空间(还不见得够用)。

诺X亚手机一部
手机中的S60系统是3.1及以上版本。 本文以Nokia N95 8GB为蓝本。

Nokia PC Suite
这个是Windows和Nokia手机连接的工具, 后面往手机上安装自己的程序时需要用到。 在Nokia网站下载:
http://nds1.nokia.com/files/support/global/phones/software/Nokia_PC_Suite_7_1_26_1_chi_sc_web.exe

Qt for S60
下载在http://pepper.troll.no/s60prereleases/
这个包当然是必不可少的。 最近的版本被命名为“Garden”, 多么的诗情画意啊! Trolltech的人还真有艺术细胞。

Perl和JRE
这两个工具是S60 SDK运行需要的工具。 需要注意的是Perl要求必须是5.6.1版本, 高低都不行。 下载在

http://downloads.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.638-MSWin32-x86.msi

JRE随便一个比较新的版本就行, 下载最新版本到sun的网站:

https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jre-6u14-oth-JPR@CDS-CDS_Developer

Carbide C++ 2.0
必装工具, 而且低版本的不行。 下载在:

http://www.forum.nokia.com/Tools_Docs_and_Code/Tools/IDEs/Carbide.c++/

需要注册帐号并登录才能下载。

S60 SDK 3rd Edition FP1

必须是3rd FP1以上版本。 我在forum nokia网站上还找到了3rd FP2, 但不如这个版本好找, 推荐下载此版本, 下载在:
http://sw.nokia.com/id/577ad48d-290c-4bb5-8bdf-779ea8a5bc6c/S60_5th_Edition_SDK_v1_0_en.zip
需要注册和登录。 这个包有三百多兆, 下载比较耗时较长。 安装后要占用将近3G的空间, 可是个绝对的大部头。

另外注意如果你用的是Nokia N97,需要去下载N97对应版本的SDK; Nokia 5800 XpressMusic需要使用 5th Edition 的SDK。 其他的配置方式与本文所述基本一致。

Open C/C++的插件
S60 SDK 3.1需要安装此包, 高的版本已经带了此工具就不需要单独下载安装了。 下载在:

http://www.forum.nokia.com/main/resources/technologies/openc_cpp/

需要注册和登录

安装和配置步骤

1、先装Perl和JRE, 随便选择路径即可, 对应的环境变量会自动设置。
2、把Carbide C++ 2.0, S60 SDK 3rd Edition FP1, Open C++分别安装到默认路径下, 顺序没有什么关系。 安装SDK过程中会提示安装gcce编译器, 这个是用来编译手机上的程序用的toolchain。
3、将qt for S60的包解压缩到C:\, 取个简单的目录名, 比如叫qt-s60.
4、更新Rpipe。 进入C:\Symbian\9.2\S60_3rd_FP1\, 将此目录下的RPipe_3.1.zip解压缩到当前位置。
5、更新预编译的Qt S60库, 这是交叉编译需要的。 将C:\qt-s60\qts60binaries\3.x\qtlibs-4.5.0-garden.exe 拷贝到C:\Symbian\9.2\S60_3rd_FP1\并运行。 这个包里带了Qt给s60 arm系统编译的二进制文件, 交叉编译程序时需要链接。
6、从开始菜单里找到Programs->Carbide.C++ v2.0->Configure environment for WINSCW command line, 运行此命令。 该命令会配置编译x86版本的S60程序需要的环境变量, 这样在普通的windows命令行也可以使用这些环境了。

编译Qt for S60的模拟器版本

S60 SDK提供了一个桌面版本的S60环境模拟器, 我们要把Qt编译成对应的版本就可以在模拟器上运行和调试Qt程序了。
首先“开始”->”运行”->”cmd”打开一个Windows命令行终端,
cd c:\qt-s60
set PATH=c:\qt-s60\bin;%PATH%  //注意命令格式和linux环境下的区别, 另外注意不要随便加空格。
configure -platform win32-mwc -xplatform symbian-abld //这个步骤会生成qmake工具和各个目录下的Makefile, 耗时较长
make debug-winscw //编译命令, 耗时较长

编译对内存要求较高是笔者实践的经验, 最开始笔者的虚拟机分配512M内存, 这一步总是出错, 而且是很吓人的某某工具内部错误, 后来内存增加到1G就没有问题了。

上面的命令如果都能成功运行, Qt的模拟器版本就编译出来了。 后面我们要找一个小qt程序来测试环境是否正确配置。

运行测试程序

随便选一个Qt程序, 也可以是自己写的, 笔者用Qt自带的例子来测试。 提醒大家注意的是这个程序必须和S60S SDK环境放在同一个盘符下, 在我们的环境里就是必须放在C盘。 因为S60的环境去找文件的时候前面没有给出盘符, 如果放到其他分区下就会出现找不到Symbian下的文件的问题。

进到qt-s60目录下的examples\painting\basicdrawing, 运行命令:
make debug-winscw //编译
make run //在模拟器里运行

这时会先弹出Windows的防火墙界面, 选“Unblock”, 再弹出S60模拟器界面, 并且会弹出一个Open C++的一个类似许可证的界面, 要关闭这个界面程序才会运行。 好了, 顺利的话你应该就能看到程序跑在模拟器里的样子了。

编译和发布手机程序

将你的手机连接与电脑的PC Suite连接。

安装Qt的基本库

找到Qt的预编译包, 在C:\qt-s60\qts60binaries\5.0\qt_libs_armv5_udeb.sisx, 双击此文件PC Suite会自动安装, 这个包只需要安装一次, 除非你升级Qt版本。 注意, 如果你的手机是像笔者一样有多个存储器, 请选择安装在手机(而不要选安装在存储卡), 这其中的道理笔者也没有弄明白, 只是不安装在手机上就运行不起来。

安装pips包

如果你的手机里没有带这个软件, 那么需要安装一下。 从http://pepper.troll.no/s60prereleases/patches/pips_nokia_1_3_SS.sis下载后双击安装。 此包只需安装一次。

编译和安装例子程序

还是以刚才的basicdrawing程序为例。
进入程序目录, 运行命令:
make debug-gcce //编译
createpackage -i basicdrawing_gcce_udeb.pkg //这一步笔者这里出错了, 不知道为什么,唉; 后来改用了rvct的编译器就成功了。 大家试一下看看gcce能成功吗?给我留言。(后来笔者换用另外一台机器的环境这个步骤就成功了,事实证明这个免费提供的toolchain也是可以用的。 至于笔者环境究竟哪里除了问题还需要继续深入研究。)

如果使用商业版的RVCT编译器, 这里的编译和打包命令略有不同, 应为:

make debug-armv5
createpackage -i basicdrawing_armv5-udeb.pkg

PC Suite会自动弹出安装界面, 手机端也会弹出安装界面, 与前面安装qt库一样。

Qt的examples里面的例子默认安装在手机菜单“应用程序”同级的“QtExamples”文件夹下, 而如果是你自己写的程序, 则会安装在“应用程序”文件夹内, 大家可别找不到程序在哪儿哦~

好了, 快点来感受一下Qt程序在手机上的效果吧。 显示方面和在模拟器上没有什么区别, 只是笔者发现Qt程序对键盘的处理好像还没有做好, 上下键都不好使, 对于键盘操作的手机可真让人郁闷了。 这个问题还需要继续研究一下。

总的来说配置Qt For S60的环境虽然步骤比较多, 但一步一步做下来还算是个比较傻瓜的过程。 唯一的问题是如果一切顺利还好办, 万一哪一步出点什么错就麻烦了, 基本上有任何问题都会成为不可调和的矛盾, 这一点让人觉得太不爽了。

Tags: , , , ,
This entry was posted on Friday, June 5th, 2009 at 3:31 PM and is filed under Qt技术. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

15 Responses to “Qt for S60开发环境全接触”

  1. Liang Qi says:

    gcce toolchain安装了么?
    C:\S60\devices\S60_3rd_FP1\Epoc32\tools\distrib\arm-none-symbianelf-2005-q1c.exe

  2. tayloy says:

    受益匪浅,非常感谢!!!
    createpackage -i basicdrawing_gcce_udeb.pkg
    这一步这里还是出错了,请问怎样改用rvct的编译器?

  3. Liang Qi says:

    出错信息呢?

  4. sikylori says:

    非常感谢,正在学习QT for S60的,
    “Perl要求必须是5.6.1版本, 高低都不行”这个是一定要的吗,我装的是ActivePerl-5.8.8.822-MSWin32-x86-280952,模拟器内运行一切正常,还没有试过真机运行的,公司不提供,自己买不起,- -!@

  5. rosen jiang says:

    我现在很郁闷的是,如果真正要发布给客户,岂不是客户要先装一堆sis(x)?
    左右为难啊

  6. idance says:

    非常感谢
    刚刚学习symbian下的QT,
    自带的例子已经可以正常工作了.
    但碰到了一个问题
    想用Qtcpserver来做一个symbian qt 的服务器
    用的是一个现成的例子,来自官网的qt-sdk-win-opensource-2009.01.exe,客户端运行一切正常
    服务器端编译运行后,可以接受来自客户端的请求,从抓包上看,可以看到三次握手已经成功,客户端发送的消息,服务器也收到了,并自动回送了ACK。但服务器一直没有检测到,所谓没检测到,就是一直没有调用incomingconnection,以及newConnection这个信号没有触发,我是加log写到文件里进行调试的,设了断点,也没有进入
    感觉是环境的问题,因为毕竟三次握手已经成功了.
    不知失败在哪?:(

  7. idance says:

    源代码:
    #include
    #include

    #include

    #include “server.h”

    Server::Server(QWidget *parent)
    : QDialog(parent)
    {
    statusLabel = new QLabel;
    quitButton = new QPushButton(tr(“Quit”));
    quitButton->setAutoDefault(false);

    //! [0] //! [1]
    tcpServer = new QTcpServer(this);
    if (!tcpServer->listen()) {
    QMessageBox::critical(this, tr(“Fortune Server”),
    tr(“Unable to start the server: %1.”)
    .arg(tcpServer->errorString()));
    close();
    return;
    }
    //! [0]

    statusLabel->setText(tr(“The server is running on port %1.\n”
    “Run the Fortune Client example now.”)
    .arg(tcpServer->serverPort()));
    //! [1]

    //! [2]
    fortunes << tr(“You’ve been leading a dog’s life. Stay off the furniture.”)
    << tr(“You’ve got to think about tomorrow.”)
    << tr(“You will be surprised by a loud noise.”)
    << tr(“You will feel hungry again in another hour.”)
    << tr(“You might have mail.”)
    << tr(“You cannot kill time without injuring eternity.”)
    <addStretch(1);
    buttonLayout->addWidget(quitButton);
    buttonLayout->addStretch(1);

    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addWidget(statusLabel);
    mainLayout->addLayout(buttonLayout);
    setLayout(mainLayout);

    setWindowTitle(tr(“Fortune Server”));
    }

    //! [4]
    void Server::sendFortune()
    {
    //! [5]
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_0);
    //! [4] //! [6]
    out << (quint16)0;
    out <seek(0);
    out <nextPendingConnection();
    connect(clientConnection, SIGNAL(disconnected()),
    clientConnection, SLOT(deleteLater()));
    //! [7] //! [8]

    clientConnection->write(block);
    clientConnection->disconnectFromHost();
    //! [5]
    }

  8. Henry says:

    请教个问题,它自带的example里的程序,使用命令
    make debug-gcce
    可以编译成功,也可以打包成sisx

    但是我自已写的qt程序在用命令编译时却出现以下错误(在qtcteator中可以编译成功和运行)
    C:\s60\devices\Nokia_N97_SDK_v1.0\epoc32\tools\make.exe: *** No rule to make target ‘debug-gcce’. Stop.
    求助前辈~

  9. 李莘 says:

    写了几篇QT for S60 Demo程序的分析文章。感觉QT for S60潜力不错,但还需努力。文章全文(包括Demo程序和源码的下载地址) 见我的博客:http://www.grati.org/?cat=8

  10. 手机壁纸 says:

    希望S60系统能够在众多系统中有所发展。

  11. shiroki says:

    rvct是个商业版的toolchain, 可能没法免费获得哦。。。我的问题也没有解决,和你一样的错误,郁闷ing

  12. shiroki says:

    装了厄,编译都成功了,但是打包报错, 很奇怪

  13. shiroki says:

    我记得用过一个高点的版本, 结果出错了, 换了这个版本就好了。 你的这个版本就不清楚咯, 如果没发现问题大概就可以用吧。

  14. _臭 虫_ says:

    可能是你的Makefile没有更新的原因。
    如果你在qtcreator下生成了Makefile,而进入N97环境后没有重新执行qmake(这个qmake对应的应该是n97 sdk下的qmake)的话,
    那么Makefile里保留的执行环境还是qtcreator下的。自然无法编译成功

    另:建议不要在blog下问题,不方便回答和更多人看到。请移步论坛www.cuteqt.com/bbs

Leave a Reply