Как передать модель в плейлист в qml? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть эта модель, которая содержит URL-адрес песен

#ifndef PLAYLISTITEM_H
#define PLAYLISTITEM_H
#include<QUrl>
#include <QObject>

class PlaylistItem : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QUrl source READ source CONSTANT)


public:
    explicit PlaylistItem(QUrl& source, QObject *parent = nullptr);
    QUrl source() const;

signals:

public slots:
private:
    QUrl m_source;
};

#endif // PLAYLISTITEM_H

У меня есть класс SongManager , который устанавливает данные для этой модели, и я установил свойство в основной.cpp вот так

SongManager manager;
ctxt->setContextProperty("manager", &manager);

Когда я получаю доступ к модели в QML вот так

Audio {
    id: music_player;
    autoPlay: false;
    playlist: manager.getSongListByAlbumName("someAlbumName", true)
}

я получаю эту ошибку,

Unable to assign QJSValue to ::QDeclarativePlaylist*

Почему я получаюэта ошибка, что мне делать, если я хочу переопределить элементы QML, такие как PlayListItem, своей собственной моделью?

1 Ответ

0 голосов
/ 10 декабря 2018

У меня есть эта модель, которая содержит URL-адрес песен

Следующий код не является моделью по определению QML для этого термина.

Audio ожидает элемент Playlist, он ничего не говорит о каких-либо моделях, даже если он у вас есть.То, что Playlist может использоваться в качестве модели, не обязательно означает, что любая модель может быть использована в качестве списка воспроизведения.Но даже если бы это было возможно, несомненно, для этого потребовалась бы модель с ролью source, а не объект со свойством source.

Что возвращает manager.getSongListByAlbumName(), на данный момент является загадкой, поэтому толькоэкстрасенс мог бы ответить на вопрос так, как он есть.

Предполагая, что manager.getSongListByAlbumName() возвращает какой-то список, который можно повторять из QML, вы можете использовать его для заполнения Playlist с помощью соответствующих методов.,Я предполагаю, что можно будет напрямую передать QList<QUrl> в Playlist.addItems(sources) и просто заставить его работать, так как этот конкретный тип контейнера автоматически конвертируется для QML.

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