Hello.

How to register pointer type in qScriptRegisterMetatype?

h-file.

Qt Code:
  1. namespace PFT3 {
  2.  
  3. class TaskEngine : public QObject {
  4. Q_OBJECT
  5. public:
  6. static const char * TaskEngine::nameInScript;
  7. static const char * TaskEngine::scriptTasksNamespaceName;
  8. void createInQScriptEngine(QScriptEngine &scriptEngine);
  9. };
  10.  
  11. namespace PFT3_Tasks {
  12.  
  13. class LIBPFT3SHARED_EXPORT BaseData : public QObject {
  14. Q_OBJECT
  15. };
  16.  
  17. class BaseDataScriptProto : public QObject, protected QScriptable {
  18. Q_OBJECT
  19. };
  20.  
  21. }// end of namespace PFT3_Tasks
  22.  
  23. }//end of PFT3 namespace
  24.  
  25. Q_DECLARE_METATYPE(PFT3::PFT3_Tasks::BaseData)
  26. Q_DECLARE_METATYPE(PFT3::PFT3_Tasks::BaseData*)
  27. Q_DECLARE_METATYPE(const PFT3::PFT3_Tasks::BaseData*)
To copy to clipboard, switch view to plain text mode 

cpp-file

Qt Code:
  1. QScriptValue PFT3TaskBaseDataToScriptValue(QScriptEngine *engine, PFT3::PFT3_Tasks::BaseData * const &in){
  2. return engine->newQObject(in, QScriptEngine::AutoOwnership);
  3. }
  4.  
  5. void PFT3TaskBaseDataFromScriptValue(const QScriptValue &object, PFT3::PFT3_Tasks::BaseData * &out){
  6. out = qobject_cast<PFT3::PFT3_Tasks::BaseData*>(object.toQObject());
  7. }
  8.  
  9. namespace PFT3 {
  10.  
  11. const char * TaskEngine::nameInScript = "pft3TaskEngine";
  12. const char * TaskEngine::scriptTasksNamespaceName = "PFT3_Tasks";//Changing this name doesn't changes 'PFT3_Tasks::BaseData*' string in error. This is only coincidence.
  13.  
  14. void TaskEngine::createInQScriptEngine(QScriptEngine &scriptEngine){
  15. /*Create single for given scriptEngine TaskEngine*/
  16. QScriptValue scriptTaskEngineObject = scriptEngine.newQObject(this);
  17. scriptEngine.globalObject().setProperty(nameInScript, scriptTaskEngineObject);
  18. /*Adding prototypes*/
  19. QScriptValue scriptTasksNamespace = scriptEngine.newQObject(new QObject(), QScriptEngine::ScriptOwnership);
  20. scriptEngine.globalObject().setProperty(scriptTasksNamespaceName, scriptTasksNamespace);
  21. /*BaseData*/
  22. PFT3_Tasks::BaseDataScriptProto *baseDataPrototypeObject = new PFT3_Tasks::BaseDataScriptProto (&scriptEngine);
  23. const QScriptValue baseDataProto = scriptEngine.newQObject(baseDataPrototypeObject, QScriptEngine::ScriptOwnership);
  24. scriptEngine.setDefaultPrototype(qMetaTypeId<PFT3::PFT3_Tasks::BaseData>(), baseDataProto);
  25. QScriptValue baseDataCtor = scriptEngine.newFunction(&PFT3_Tasks::BaseData::construct, baseDataProto);
  26. scriptEngine.globalObject().property(scriptTasksNamespaceName).setProperty("BaseData", baseDataCtor);
  27.  
  28. /*-------------------------------------------------------------------------------------------------------*/
  29. qScriptRegisterMetaType(&scriptEngine, PFT3TaskBaseDataToScriptValue, PFT3TaskBaseDataFromScriptValue);//I register it here.
  30. /*-------------------------------------------------------------------------------------------------------*/
  31.  
  32. }
  33.  
  34. }// end of namespace PFT3
To copy to clipboard, switch view to plain text mode 

Then I write on QtScript:

Qt Code:
  1. //delete task;
  2. var task = new PFT3_Tasks.BaseData(1, 2, 6000, 2000, true);
  3. pft3TaskEngine.appendTask(task);
To copy to clipboard, switch view to plain text mode 

And get script exception,that I parse to output:
Error in script caused the exception:
"TypeError: cannot call appendTask(): argument 1 has unknown type `PFT3_Tasks::BaseData*' (register the type with qScriptRegisterMetaType())"
at executing line 3.
Call stack:
1. <anonymous>()@Script, entered by user:3
http://lists.qt.nokia.com/public/qt-...ry/002051.html I read and tried with typedef.
Making Applications Scriptable I read too and many times.
How to do this correctly?
Thank you for your replies.