我有一个保存歌曲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 类,该类将数据设置为此模型,并且我已经在main.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),该怎么办?
答案 0 :(得分:1)
我有一个保存歌曲URL的模型
以下代码不是该术语的任何QML定义的模型。
Audio
期望有一个Playlist
元素,即使您有一个模型,它也不会说任何模型。仅仅因为Playlist
可以用作模型并不一定意味着任何模型都可以用作播放列表。但是,即使有可能,也肯定会需要具有source
角色的模型,而不是具有source
属性的对象。
manager.getSongListByAlbumName()
返回的内容目前还是个谜,因此只有一个通灵者才能回答这个问题。
假设manager.getSongListByAlbumName()
返回可以从QML迭代的某种列表,则可以使用相应的方法使用该列表来填充Playlist
。我认为可以将QList<QUrl>
直接传递给Playlist.addItems(sources)
并使其正常工作,因为这种特定的容器类型会自动转换为QML。