Qt listviews и items image - PullRequest
       0

Qt listviews и items image

0 голосов
/ 03 марта 2020

У меня есть класс 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.

мой путь правильный? Так где моя проблема и как ее исправить? Если мой путь неправильно скажи мне правильный способ сделать это. спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...