關鍵點就是使用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通砍。