Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can’;无法从QtScript访问公共插槽_Qt_Qt4_Qtscript - Fatal编程技术网

Can’;无法从QtScript访问公共插槽

Can’;无法从QtScript访问公共插槽,qt,qt4,qtscript,Qt,Qt4,Qtscript,我有这门课: class JavaScript : public QObject { Q_OBJECT public: JavaScript(); bool executeFromFile(QString file); bool enabled; public slots: void setEnabled( bool enabled ); bool isEnabl

我有这门课:

class JavaScript : public QObject {    
    Q_OBJECT
    public:
        JavaScript();        
        bool executeFromFile(QString file);  
        bool enabled;

    public slots:
        void setEnabled( bool enabled );
        bool isEnabled() const;    

    private:
        QScriptEngine engine;
};
这些方法的定义如下:

#include "javascript.h"

JavaScript::JavaScript() {  
    executeFromFile("test.js");
}
bool JavaScript::executeFromFile(QString file) {
    QFile scriptFile(file);
    if (!scriptFile.open(QIODevice::ReadOnly)) return false;
    QTextStream stream(&scriptFile);
    QString contents = stream.readAll();    
    scriptFile.close();
    engine.evaluate(contents, file);    
    return true;
}

void JavaScript::setEnabled( bool enabled ) {
    JavaScript::enabled = enabled;
}
bool JavaScript::isEnabled() const {
    return enabled;
}
// javascript.h:

JavaScript(QObject *parent = 0);

// javascript.cpp:

JavaScript::JavaScript(QObject *parent) : QObject(parent) {}
我试图访问先前在头文件中定义的公共插槽,如文档所示:

test.js文件如下所示,如文档示例所示:

var obj = new JavaScript();
obj.setEnabled( true );
print( "obj is enabled: " + obj.isEnabled() );
但我什么也没得到。似乎找不到JavaScript对象。我错过了什么

做一个简单的

print(1+1)
很好用

编辑:qt4网页中的An实现Q_属性。我尝试了这个,但得到了同样的结果:

Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
编辑1:尝试实现如下初始值设定项:

#include "javascript.h"

JavaScript::JavaScript() {  
    executeFromFile("test.js");
}
bool JavaScript::executeFromFile(QString file) {
    QFile scriptFile(file);
    if (!scriptFile.open(QIODevice::ReadOnly)) return false;
    QTextStream stream(&scriptFile);
    QString contents = stream.readAll();    
    scriptFile.close();
    engine.evaluate(contents, file);    
    return true;
}

void JavaScript::setEnabled( bool enabled ) {
    JavaScript::enabled = enabled;
}
bool JavaScript::isEnabled() const {
    return enabled;
}
// javascript.h:

JavaScript(QObject *parent = 0);

// javascript.cpp:

JavaScript::JavaScript(QObject *parent) : QObject(parent) {}
还是没什么

编辑2:一些示例也继承自
QScriptable

class JavaScript : public QObject, public QScriptable {}

但这也没什么区别。

您需要创建QScript类而不是QObject。Qt包含如何在Qt中扩展脚本功能的示例。看看

我无法创建QScripClass:*错误:类型“QScriptClass”不是“JavaScript”的直接基**示例链接已失效-你是说这个示例-?