关键点就是使用Q_GADGET、并注册为元对象qRegisterMetaType<Song>();
//song.h 只有一个头文件
class Song
{
Q_GADGET
public:
explicit Song();
Song(const Song& song):
sourceType(song.sourceType)
{
}
~Song(){}
Q_PROPERTY(int sourceType READ getSourceType)
int sourceType;
int getSourceType() const{return sourceType;}
};
calss SongGetter{
public:
Q_INVOKABLE getSong()
{
Song song_;
...
emit songArrive(song_);
}
signals:
void songArrive(Song song);
}
//main.h
qRegisterMetaType<Song>();
qmlRegisterType("Alex.SongGetter",1,0,"SongGetter");
//xxxx.qml,再qml使用
import Alex.SongGetter1.0
SongGetter{
id:client
onSongArrive: {
console.log(song.name)
}
}
不需要使用qmlRegisterType去注册Song,可以通过信号传递Song到qml中。
说的可能有点太简洁了,其实却是很简单,一共就两步:
1.Song的代码,即song.h,
2.是用qRegisterMetaType<Song>();注册MetaType。