• 7554阅读
  • 13回复

[提问]qt打包问题 [复制链接]

上一主题 下一主题
离线布莱德宝
 
只看楼主 倒序阅读 楼主  发表于: 2012-10-24
— 本帖被 XChinux 从 Qt安装与发布 移动到本区(2012-11-04) —

前几天,在将qt程序打包成.sis文件后,在手机安装后,无法运行。显示找不到资源文件,在此我想咨询一下,在将qt程序打包时,资源文件是否自动添加到.sis文件中。如若不是,应该怎样做才能将资源文件打包进.sis文件中。敬请各位大侠不吝赐教。我的打包方法如下:将源代码、pro文件写好后,通过开始菜单的Nokia Qt SDK -> Symbian -> Qt for Symbian Command Prompt打开命令行控制台,然后切换到自己写的源代码.pro文件所在目录下,然后依次执行下面命令:
qmake
make release-gcce
make sis
最后就生成一个.sis的自签名文件。

另外,我的资源文件是两个txt文档。

离线XChinux

只看该作者 1楼 发表于: 2012-10-24
有两种方法:
1. 将资源文件用.qrc管理起来,这样就编译到程序里面去了
2. 在.pro中写将要打包的资源文件加到DEPLOYMENT中去,比如下面示例.pro中的shares变量:

  1. TEMPLATE = app
  2. TARGET = SameGame
  3. OBJECTS_DIR = tmp
  4. UI_HEADERS_DIR = tmp
  5. MOC_DIR = tmp
  6. RCC_DIR = tmp
  7. QT += declarative svg
  8. CONFIG += mobility qt-components release
  9. MOBILITY += multimedia
  10. contains(DEFINES, BUILD_MEEGO) {
  11. QT += dbus
  12. HEADERS += QtDBusObject.hpp
  13. SOURCES += QtDBusObject.cpp
  14. }
  15. HEADERS += MainWindow.hpp \
  16.         board.h \
  17.         renderer.h \
  18.         krandom.h \
  19.         krandomsequence.h \
  20.         HighScoreDialog.hpp
  21. SOURCES += main.cpp \
  22.         MainWindow.cpp \
  23.         board.cpp \
  24.         renderer.cpp \
  25.         krandom.cpp \
  26.         krandomsequence.cpp \
  27.         HighScoreDialog.cpp
  28. RESOURCES += main.qrc
  29. TRANSLATIONS = etc/samegame_zh_CN.ts
  30. OTHER_FILES += qml/main.qml \
  31.     etc/main_qml_zh_CN.ts \
  32.     org.qtcn.samegame.spec \
  33.     org.qtcn.samegame.desktop \
  34.     org.qtcn.samegame-meego-tablet.desktop
  35. win32 {
  36. DESTDIR = ./
  37. RC_FILE = main.rc
  38. }
  39. symbian {
  40.     TARGET.UID3 = 0xE7A2CEB9
  41. TARGET.CAPABILITY += NetworkServices
  42.     ICON = ../share/samegame.svg
  43.     vendorinfo = \
  44.     "%{\"qtcn.org\"}" \
  45.     ":\"qtcn.org\""
  46.     deploy1.pkg_prerules = vendorinfo
  47.     
  48.     shares.path = /org.qtcn.samegame/share
  49.     shares.sources = ../share/*.svg ../share/*.wav
  50.     DEPLOYMENT += deploy1 shares
  51.     DEPLOYMENT.display_name = SameGame
  52. }
  53. unix:!symbian {
  54.     target.path = /opt/org.qtcn.samegame/bin
  55.     shares.path = /opt/org.qtcn.samegame/share
  56.     shares.files = ../share/*.svg ../share/*.ogg
  57.     desktop.path = /usr/share/applications
  58.     desktop.files = org.qtcn.samegame.desktop
  59.     meegotabletdesktop.path = /usr/share/meego-ux-appgrid/applications
  60.     meegotabletdesktop.files = org.qtcn.samegame-meego-tablet.desktop
  61.     INSTALLS += target shares desktop meegotabletdesktop
  62. }

二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 2楼 发表于: 2012-10-24
回 1楼(XChinux) 的帖子

版主,您所说的将资源文件用.qrc管理起来,是不是像图片这样
离线XChinux

只看该作者 3楼 发表于: 2012-10-24
对,最好学会自己写.qrc文件,很简单的.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 4楼 发表于: 2012-10-25
回 3楼(XChinux) 的帖子
版主,还得麻烦您,在这种情况下打包,为什么我的.qrc文件不能打进.sis安装包中?应该怎么解决啊?
离线XChinux

只看该作者 5楼 发表于: 2012-10-26
.qrc是给.pro里用的啊。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 6楼 发表于: 2012-10-26
版主,您的意思是不是打包时资源文件会随.pro自动打进去?
离线XChinux

只看该作者 7楼 发表于: 2012-10-26
看.pro的帮助文档。

RESOURCES += xxxx.qrc
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 8楼 发表于: 2012-10-27
回 7楼(XChinux) 的帖子
版主,我检查了下自己的.pro文件,代码如下
    
QT       += core gui

TARGET = shp
TEMPLATE = app


SOURCES += main.cpp\
        widget.cpp \
    mydia.cpp \
    dia_showmean.cpp

HEADERS  += widget.h \
    mydia.h \
    foodsort.h \
    code.h \
    dia_showmean.h

FORMS    += widget.ui \
    mydia.ui \
    dia_showmean.ui

RESOURCES += \
                           txt.qrc

在模拟器情况下可以正常调用,可是在symbian平台中的release版本下运行,将其部署到手机后仍然是不能调用资源文件,打包后,安装还是后结果跟部署在手机上结果相同。请问这是怎么回事?该如何解决?
离线XChinux

只看该作者 9楼 发表于: 2012-10-27
那你就用第二种情况吧,放到 DEPLOYMENT变量里,打包发布到手机上。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 10楼 发表于: 2012-10-27
回 9楼(XChinux) 的帖子
版主,我刚刚接触qt,对于下面这段代码有点看不懂:symbian {
    TARGET.UID3 = 0xE7A2CEB9
TARGET.CAPABILITY += NetworkServices

    ICON = ../share/samegame.svg

    vendorinfo = \
    "%{\"qtcn.org\"}" \
    ":\"qtcn.org\""
    deploy1.pkg_prerules = vendorinfo
    
    shares.path = /org.qtcn.samegame/share
    shares.sources = ../share/*.svg ../share/*.wav

    DEPLOYMENT += deploy1 shares
    DEPLOYMENT.display_name = SameGame
}
您能不能帮忙解释一下,
离线XChinux

只看该作者 11楼 发表于: 2012-10-27
这看也看明白了吧?

Symbian程序需要一个UID
CAPABILITY是指启用哪些系统功能
vendorinfo是指软件开发供应商信息。
shares是自己定义的,path和sources分别指路径和文件
DEPLOYMENT指发布依赖的内容
DEPLOYMENT.display_name是指应用显示的名称。

想了解具体的,就得看symbian程序编译方面的内容了。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线布莱德宝
只看该作者 12楼 发表于: 2012-10-27
版主,还得麻烦您一下,我想请教一下第一行中的UID是不是qt程序打包后,生成pkg文件中包含的?
离线布莱德宝
只看该作者 13楼 发表于: 2012-10-27
回 11楼(XChinux) 的帖子
版主,还得麻烦您一下,我想请教一下第一行中的UID是不是qt程序打包后,生成pkg文件中包含的? 还有就是我在qt程序中使用的是相对路径,在这里编写时也是写相对路径吗?
快速回复
限100 字节
 
上一个 下一个