• 10548阅读
  • 10回复

能把声音文件添加到qrc中吗?【已解决】 [复制链接]

上一主题 下一主题
离线luoyes
 

只看楼主 倒序阅读 楼主  发表于: 2010-08-31
— 本帖被 XChinux 执行加亮操作(2010-09-02) —
问个比较弱智的问题qrc文件中只能放图片吗?能不能把声音文件也放进去?
其实就是想把声音文件也打包到exe中,要不就一个小程序还得带着个声音文件



【解决方法见7楼】
[ 此帖被luoyes在2010-12-06 10:34重新编辑 ]
离线xtfllbl

只看该作者 1楼 发表于: 2010-08-31
qrc只是个资源索引文件,楼主是不是误以为文件都保存到qrc当中去了。

任何文件都可以通过qrc来索引。
上海欢迎您
离线paranoid
只看该作者 2楼 发表于: 2010-08-31
QSound不支持qrc:
Note that QSound does not support resources. This might be fixed in a future Qt version.
离线xtfllbl

只看该作者 3楼 发表于: 2010-08-31
如果楼主不是使用qsound播放的话,完全可以使用qrc,就一个xml文件而已。
上海欢迎您
离线wxyao

只看该作者 4楼 发表于: 2010-11-24
引用第2楼paranoid于2010-08-31 09:49发表的  :
QSound不支持qrc:
Note that QSound does not support resources. This might be fixed in a future Qt version.


大哥,你太有才啦,终于发现问题啦~~~~~~~~
离线water_wf

只看该作者 5楼 发表于: 2010-11-24
图片什么的应该是编译进dll了吧
离线luoyes

只看该作者 6楼 发表于: 2010-12-02
楼上各位,不好意思了,都快忘了还有这个帖子

qrc文件经过 rcc.exe的编译会生成一个OBJ文件( 像这样: rcc resources/resources.qrc -o resources_rc.obj ),这个文件在链接时应该会被打包进exe中(这么说可能不够专业,呵呵)
正如2楼所说

 Note that QSound does not support resources. This might be fixed in a future Qt version.


所以即便把声音文件加入qrc中,编译后的文件中也没有声音文件,希望 This will be fixed in a future Qt version. 呵呵。
离线lxbin2003

只看该作者 7楼 发表于: 2010-12-02
        QFile wave(":/book.wav");
        QTemporaryFile file;
        file.setAutoRemove(true);
        if(wave.open(QIODevice::ReadOnly))
        {
            if(file.open())
            {
                file.write(wave.readAll());
                file.close();
                QSound sound(file.fileName());
                sound.play();
                //file.remove();
            }
            wave.close();
        }
这样就可以包含到exe文件中去了,发布的时候不用再带个“小尾巴”.
离线luoyes

只看该作者 8楼 发表于: 2010-12-03
引用第7楼lxbin2003于2010-12-02 21:10发表的 :
        QFile wave(":/book.wav");
        QTemporaryFile file;
        file.setAutoRemove(true);
        if(wave.open(QIODevice::ReadOnly))
        {
.......



感觉似乎行不通啊,能说下原理吗?
离线lxbin2003

只看该作者 9楼 发表于: 2010-12-03
引用第8楼luoyes于2010-12-03 15:34发表的  :
感觉似乎行不通啊,能说下原理吗?



qrc是资源文件,可以被编译到你的EXE文件中。但可以用QFile打开。然后把这个资源文件写到一个临时文件中去,再用QSound播放即可。
离线luoyes

只看该作者 10楼 发表于: 2010-12-06
回 9楼(lxbin2003) 的帖子
太帅了,真是高手啊,在下佩服佩服
不过 QTemporaryFile  不能再临时文件使用结束前关闭,否则临时文件就被干掉了,或者把
file.setAutoRemove(true);
改为
file.setAutoRemove(false);
估计就OK了。
再次感谢!
快速回复
限100 字节
 
上一个 下一个