我正在尝试将C ++信号连接到QML插槽。交换的数据是对我自己的类的对象的常量引用。因此,在加载QML文件之前,此类已注册到Qt元系统。
在代码中它看起来像这样:
自定义元类型的标题:
class QSong : public QObject
{
private:
Q_OBJECT
Q_PROPERTY( QString artist READ artist CONSTANT )
Q_PROPERTY( QString album READ album CONSTANT )
Q_PROPERTY( QString title READ title CONSTANT)
QString m_artist; ///< Data field containing the song's artist
QString m_album; ///< Data field containing the song's album
QString m_title; ///< Data field containing the song's title
public:
/* Constructors, copy assignment operator and getters */
};
Q_DECLARE_METATYPE(QSong)
元类型注册(在加载qml文件之前):
qmlRegisterType<QSong>("webradio.types", 1, 0, "Song");
C ++信号:
void currentSongChanged( const QSong& song );
QML广告:
Connections {
target: Global.MPD; // This is a tested to be working singleton
onCurrentSongChanged: {
print(song);
print(song.artist);
}
}
据我了解程序,这应该足以传输数据。仍然只要用有效的QSong对象触发信号,输出如下:
qml: QVariant(QSong)
qml: undefined
我之前已经问过类似的问题,但是那里提出的解决方案对我没有用。
例如,如果我尝试按照this thread中的建议将slot参数分配给本地属性,则输出状态
Cannot assign QSong to QSong*
我在版本6.2.1中使用Qt 5.7.1和GCC。