使用 QML 从委托文件中获取元数据
Posted
技术标签:
【中文标题】使用 QML 从委托文件中获取元数据【英文标题】:Get meta data from delegated files using QML 【发布时间】:2013-05-08 13:05:17 【问题描述】:我正在为 QML 中的 Ubuntu Touch 创建一个音乐播放器,由于我是 QML 新手,因此我有一些事情我希望能得到一些帮助。
我有一个目录中的曲目列表,但我想显示元数据(艺术家、曲目名称、年份、专辑等)而不是文件名。
使用 Qt.Multimedia 能够从当前播放的曲目中获取元数据,但我无法从我的 FolderListModel 委托文件中找到每个文件的方法。
我该怎么做?
这是当前代码:
Column
anchors.centerIn: parent
anchors.fill: parent
ListView
id: musicFolder
FolderListModel
id: folderModel
folder: musicDir
showDirs: false
nameFilters: ["*.ogg","*.mp3","*.oga","*.wav"]
width: parent.width
height: parent.height
model: folderModel
delegate: ListItem.Subtitled
text: fileName
subText: "Artist: "
onClicked:
console.debug('Debug: User pressed '+musicDir+fileName)
playMusic.source = musicDir+fileName
playMusic.play()
trackInfo.text = playMusic.metaData.albumArtist+" - "+playMusic.metaData.title // show track meta data
【问题讨论】:
我不确定 QtMultimedia,但在 Phonon 中,您必须先实际播放文件,然后才能提取元数据。要从文件夹中的所有文件中显式提取数据,您必须使用外部库,如 taglib.github.io QtMultimedia 中的行为是否也相同? 嗨,Amit,好吧,是的,在使用 QtMultimedia 提取元数据之前,我似乎必须先播放每个曲目。但是它消耗了大量的能量并且使应用程序非常慢,这就是为什么我想看看是否有其他选择可以代替这种方式。 【参考方案1】:似乎最简单的方法是获取一个 C++ 库,该库可以从这些文件中解析元数据,并使用它在 C++ 中创建一个自定义 ListModel,将这些信息填充到自身上。不幸的是,这必须在 C++ 中完成,因为 javascript 没有读取和解析文件的 IO 功能。
【讨论】:
谢谢。如果是这样的话,我希望音乐应用程序的一些贡献者能帮助我。【参考方案2】:实际上,我想我可能会继续使用 QtMultimedia,但将数据保存在本地数据库中。启动时,它会检查音乐目录并添加/删除曲目。这样它只会在第一次启动时很慢(希望如此)
【讨论】:
以上是关于使用 QML 从委托文件中获取元数据的主要内容,如果未能解决你的问题,请参考以下文章
Autodesk Forge 从转换后的 DWG 获取清单和元数据
使用 C# 从 ASP.Net MVC 中的视频文件中获取视频元数据的最佳方法是啥?