C++ QML多媒体在文件夹中播放所有mp3
我正在尝试用QML构建一个简单的媒体播放器。我不能将C++ QML多媒体在文件夹中播放所有mp3,c++,qt,audio,qml,multimedia,C++,Qt,Audio,Qml,Multimedia,我正在尝试用QML构建一个简单的媒体播放器。我不能将QFile对话框用作在EGLFS上运行的单个窗口应用程序。到目前为止,我成功地为QML构建了一个简单的文件浏览器,可以在固定位置播放mp3。但这就是我被困的地方: 如何将树视图中当前选定的文件设置为音频源 如何从所选文件夹中获取音频播放每个以mp3结尾的文件 谢谢你的帮助 .pro文件 QT += qml quick multimedia widgets CONFIG += c++11 SOURCES += main.cpp RESOURCES
QFile
对话框用作在EGLFS上运行的单个窗口应用程序。到目前为止,我成功地为QML构建了一个简单的文件浏览器,可以在固定位置播放mp3。但这就是我被困的地方:
音频
播放每个以mp3结尾的文件QT += qml quick multimedia widgets
CONFIG += c++11
SOURCES += main.cpp
RESOURCES += qml.qrc
QML_IMPORT_PATH =
QML_DESIGNER_IMPORT_PATH =
DEFINES += QT_DEPRECATED_WARNING
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
main.cpp:
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QtQml>
#include <QFileSystemModel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
app.setOrganizationName("Power-Tune");
app.setOrganizationDomain("power-tune.org");
app.setApplicationName("PowerTune");
QQmlApplicationEngine engine;
//
QFileSystemModel model;
model.setRootPath("/");
engine.rootContext()->setContextProperty("my_model", &model);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
几点注意:
property bool playing: false
属性最好在层次结构的顶部定义,以便在所有子级中都可以访问,因此更愿意将其直接放在ApplicationWindow
中,而不是放在Rectangle
元素中
而且,我认为TreeView
不是一个合适的选择(它是Quick Controls 2.0中不可用的Quick Controls 1.0元素,对于混合,请检查此项)
您可以直接从QML创建模型,使用带有FolderListModel
的ListView
,您只需要额外的装饰来突出显示和使用鼠标选择文件。。仅此而已,TreeView
可以用下面的代码替换,它工作正常,而且很有趣
...
import QtQuick.Controls 2.2
import Qt.labs.folderlistmodel 2.1
...
ListView {
id: list
width: parent.width/2
height: parent.height
model: folderModel
onCurrentIndexChanged: {
// This will handle changing playlist with all possible selection methods
playMusic.source = folderModel.get(currentIndex, "fileURL")
}
FolderListModel {
id: folderModel
folder: "file:///MP3/"
showDirs: false
nameFilters: ["*.mp3"]
}
delegate: Component {
Item {
width: parent.width
height: 40
Column {
Text { text: fileName }
}
MouseArea {
anchors.fill: parent
onClicked: {
list.currentIndex = index
}
}
}
}
highlight: Rectangle {
color: 'grey'
}
focus: true
}
对于单击的按钮,只需处理
列表视图的currentIndex
,例如在下一个按钮中添加:
onClicked: list.currentIndex += 1
您还需要添加一些代码,以避免索引超出范围或-1…等等。对不起,我的代码实际上有“上一步”和“下一步”按钮。我只是将代码的相关部分粘贴为“上一个”和“下一个”,目前不做任何操作。刚刚纠正了嗨,对不起,我开车去上班。我使代码示例现在可以独立执行。我想在树状视图中只显示扩展名为*.mp3的文件,然后将playmusic的源设置为当前选定的路径,并使用选定的文件名是的,这也是一个好主意。它只需要能够显示文件夹和驱动器,因为我计划在raspberry pi上使用它,并且音乐99%的时间都在外部U盘上
onClicked: list.currentIndex += 1