platon
18th September 2012, 13:34
I'm trying to expose to JS the audioTracks object which should be accessible from JS as array (audioTracks[index]) and at the same time should have method audioTracks.getTrackById("id").
Here is my object:
class AudioTrackList : public QObject, public QObjectList
{
Q_OBJECT
public:
AudioTrackList(ScriptableIfaceMedia*);
Q_PROPERTY(int length READ size SCRIPTABLE true)
Q_INVOKABLE QObject* getTrackById(QString id);
private:
ScriptableIfaceMedia* m_impl;
QScriptEngine m_engine;
};
The problem is that when I expose the object in the following way:
Q_PROPERTY(QObjectList audioTracks READ audioTracks SCRIPTABLE true)
QObjectList audioTracks();
QObjectList MediaTracks::audioTracks()
{
int i;
QScriptValue rv = m_engine.newArray(m_audio_tracks->size());
for (i = 0; i < m_audio_tracks->size(); i++) {
rv.setProperty(i, m_engine.newQObject(m_audio_tracks->at(i), QScriptEngine::QtOwnership));
}
return static_cast<QObjectList>(*m_audio_tracks);
}
I have audioTracks[index] working but audioTracks.getTrackById("id") not.
Instead when I expose the object another way:
Q_PROPERTY(QObject* audioTracks READ audioTracks SCRIPTABLE true)
QObject* audioTracks();
QObject* MediaTracks::audioTracks()
{
m_engine.newQObject(m_audio_tracks, QScriptEngine::QtOwnership);
return m_audio_tracks;
}
I have audioTracks.getTrackById("id") working but audioTracks[index] not.
Is there any way to export my object to make it possible to access it from JS both like array and like object?
Here is my object:
class AudioTrackList : public QObject, public QObjectList
{
Q_OBJECT
public:
AudioTrackList(ScriptableIfaceMedia*);
Q_PROPERTY(int length READ size SCRIPTABLE true)
Q_INVOKABLE QObject* getTrackById(QString id);
private:
ScriptableIfaceMedia* m_impl;
QScriptEngine m_engine;
};
The problem is that when I expose the object in the following way:
Q_PROPERTY(QObjectList audioTracks READ audioTracks SCRIPTABLE true)
QObjectList audioTracks();
QObjectList MediaTracks::audioTracks()
{
int i;
QScriptValue rv = m_engine.newArray(m_audio_tracks->size());
for (i = 0; i < m_audio_tracks->size(); i++) {
rv.setProperty(i, m_engine.newQObject(m_audio_tracks->at(i), QScriptEngine::QtOwnership));
}
return static_cast<QObjectList>(*m_audio_tracks);
}
I have audioTracks[index] working but audioTracks.getTrackById("id") not.
Instead when I expose the object another way:
Q_PROPERTY(QObject* audioTracks READ audioTracks SCRIPTABLE true)
QObject* audioTracks();
QObject* MediaTracks::audioTracks()
{
m_engine.newQObject(m_audio_tracks, QScriptEngine::QtOwnership);
return m_audio_tracks;
}
I have audioTracks.getTrackById("id") working but audioTracks[index] not.
Is there any way to export my object to make it possible to access it from JS both like array and like object?