У меня есть класс C ++ " songitemmodeler ", который наследуется от QAbstractListModel, и я использую его в Qml для заполнения списка, в songitemmodeler У меня есть QMediaPlaylist, в котором хранится моя песня, моя проблема с обложкой альбома метаданных песни, как я могу установить изображение каждой песни в списке? я использовал QQuickImageProvider для этой работы, но я думаю, что это не очень хороший подход, или, по крайней мере, мое стремление и мой способ использования QQuickimageprovider не очень хорош. я создаю класс " LiveImageProvider ", который наследуется от QQuickImageProvider, а LiveImageProvider имеет два члена Qimage, "image" и "default_image",
requestImage, переопределяется следующим образом:
QImage LiveImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize){
QFileInfo info(id.split("=")[1]);
music.setMedia(QUrl::fromLocalFile(info.path()+"/"+info.fileName()));
QImage result = image;
if (result.isNull()){
result = this->default_image;
}
if(size) {
*size = result.size();
}
if(requestedSize.width() > 0 && requestedSize.height() > 0) {
result = result.scaled(requestedSize.width(), requestedSize.height(), Qt::KeepAspectRatio);
}
return result;
}
in LiveImageProvider конструктор соединяет musi c MediaStatusChanged сигнал в лямбда-функцию для установки изображения на изображение песни следующим образом:
connect(&music,&QMediaPlayer::mediaStatusChanged,this,[this]()
{
if(this->image != image)
{
this->image = image;
}
});
в Qml ListView i есть изображение:
Image {
id:rowimage
source: "image://live/image?id="+model.path
height: parent.height -10
width: height
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 10
smooth: true
asynchronous: true
}
model.path - это путь к песне в системе
, когда я запускаю программу, изображение какой-то песни не загружается, а некоторые - , изображение песни, загруженное в приложение, неверно, пример неправильного изображения песни:
- у песни 1 нет изображения
- у песни 2 есть изображение песни1
- песня 3 имеет song2 image
- song 4 не имеет изображения
....
и при установке асинхронно: false нет загрузки изображения в qml.
мой путь правильный? Так где моя проблема и как ее исправить? Если мой путь неправильно скажи мне правильный способ сделать это. спасибо