Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Custom Script Class Parameterübergabe



  • Hallo allerseits,

    Ich möchte mir einige Klasse entwickeln, welche mithilfe der QScriptEngine verarbeitet und ausgeführt werden sollen.
    Angefangen habe ich mit einer einfachen String-Klasse. Das funktioniert soweit auch schon ganz gut.

    Der folgende JavaScript-Code funktioniert:
    @var string1 = new QdbString();
    var string2 = new QdbString();
    var msgBox = new QdbMessageBox();

    string1.assign("Hallo Welt!");
    string2.assign(string1.getString());

    msgBox.setTitle(string1.getString());
    msgBox.setText(string2.getString());

    msgBox.exec();@

    Bei diesem hier gibt isError() vom Rückgabetyp "QScriptValue" bei evaluate false zurück:
    @var string1 = new QdbString();
    var string2 = new QdbString();
    var msgBox = new QdbMessageBox();

    string1.assign("Hallo Welt!");
    string2.assign(string1);

    msgBox.setTitle(string1.getString());
    msgBox.setText(string2.getString());

    msgBox.exec();@

    Einziger Unterschied der beiden Skripte ist, dass bei string2.assign direkt string1 angegeben ist.
    Die assign-Methode ist in meinen Klassen folgendermaßen überladen:

    QdbString.h
    @public Q_SLOTS:
    void assign(const char* _String);
    void assign(const QString &_String);
    void assign(const QdbString &_String);@

    QdbString.cpp
    @void QdbString::assign(const char* _String)
    {
    this->m_String = _String;
    }

    void QdbString::assign(const QString &_String)
    {
    this->m_String = _String;
    }

    void QdbString::assign(const QdbString &_String)
    {
    this->m_String = _String.m_String;
    }@

    QdbStringScriptPrototype.h
    @public Q_SLOTS:
    void assign(const char* _String);
    void assign(const QString& _String);
    void assign(const QdbString& _String);@

    QdbStringScriptPrototype.cpp
    @void QdbStringScriptPrototype::assign(const char* _String) {
    this->nativeObject()->assign(_String);
    }

    void QdbStringScriptPrototype::assign(const QString& _String)
    {
    this->nativeObject()->assign(_String);
    }

    void QdbStringScriptPrototype::assign(const QdbString& _String)
    {
    this->nativeObject()->assign(_String);
    }@

    Also das Problem ist nun konkret, dass die assign(const QString& _String) akzeptiert wird und die assign(const QdbString& _String) Methode nicht.
    Warum ist das so? Ich habe meine Quelltexte anhand des CustomClass-Beispiels von Qt erstellt. Ich kann den kompletten Source der Dateien leider nicht angeben, da die Posts auf 6000 Zeichen begrenzt sind.

    Muss man in der QdbStringScriptPrototype-Klasse oder der QdbStringScriptClass noch etwas deklarieren damit die Übergabe des Typs QdbString akzeptiert wird?

    Gruß
    Manuel


Log in to reply