向现有QT应用程序添加javascript支持
我现在有一个功能强大的QT应用程序,有几个按钮 我需要直接从javascript控制我的应用程序,如下例所示,其中AccessControl是我的QObject类:向现有QT应用程序添加javascript支持,javascript,c++,qt,qtscript,Javascript,C++,Qt,Qtscript,我现在有一个功能强大的QT应用程序,有几个按钮 我需要直接从javascript控制我的应用程序,如下例所示,其中AccessControl是我的QObject类: AccessControl.configure("price",10); AccessControl.configure("autoClose",false); var ret = AccessControl.sendAskAliveMessage() ; if(!ret) { AccessControl.print("To
AccessControl.configure("price",10);
AccessControl.configure("autoClose",false);
var ret = AccessControl.sendAskAliveMessage() ;
if(!ret)
{
AccessControl.print("Toll not found");
}
else
{
ret = AccessControl.SendTransactionMessage() ;
if(ret)
{
AccessControl.Open();
wait(10000);
AccessControl.Close();
}
else
{
AccessControl.printError(ret);
}
}
我现有的应用程序连接信号和插槽,如下所示:
QObject::connect(&w, SIGNAL(SendTransaction()),
&Toll, SLOT(SendTransactionMessage()));
我是QT的初学者,我想做的就是让用户能够使用脚本,而不是点击UI
我已经阅读了QTScript文档,但是我确实有一些困难来理解它
如果有人能告诉我怎么做,或者你有一些好的简单的例子,那就太好了
有关我的问题的更多信息,请编辑:
我的应用程序是一个访问控制模拟器。我有几个按钮,以打开门,关闭它,配置价格。。。
我想编写这个应用程序的脚本,以便在没有需要单击UI的用户在场的情况下创建每个可能的测试用例
谢谢。您可以将类连接到JavaScript。下面是一个PySide python示例
class MyCLass(object):
@QtCore.Slot(str)
def doSomething(self, info):
# do something with the string info here
frame.addToJavaScriptWindowObject("varName", MyClass)
frame.evaluateJavaScript("varName.doSomething('string')")
我认为C++就是这样做的。这里是插槽的链接。QWebFrame可以向javascript添加对象并运行javascript代码
class MyClass {
public slots:
void doSomething(String info);
我发现了一个非常好的例子,他帮了我很多 您可以在此处找到代码: Jay和Justin的回答是正确的,如果函数位于“公共槽”,则可以从脚本访问该函数 我的工作代码:
MyClass AccessControl();
QScriptEngine scriptEngine;
QScriptValue AccessControlValue = scriptEngine.newQObject(&AccessControl);
Q_ASSERT (AccessControl.isQObject());
scriptEngine.globalObject().setProperty("AccessControl", AccessControlValue);
[...]//SLOT and SIGNAL connection
while(getchar() != 'q')
{
QFile file("Script.js");
file.open(QIODevice::ReadOnly);
QScriptValue result = scriptEngine.evaluate(file.readAll());
if(result.toString() != "undefined")
std::cout << result.toString().toStdString() << std::endl;
file.close();
if (scriptEngine.hasUncaughtException())
{
int lineNo = scriptEngine.uncaughtExceptionLineNumber();
printf("lineNo : %i", lineNo);
}
}
现在它工作正常,每次我按enter键时它都会评估我的脚本,因此,我可以在不关闭应用程序的情况下修改我的脚本,然后重新评估它。您搜索过Qt脚本示例吗?是的,这些例子的问题是C++正在评估脚本,以便改变应用程序的协调。我想要执行我的脚本,以便在我的QT类中任意一个时隙。如果用一个时隙声明C++类,那么可以从脚本引擎调用时隙,而不需要任何额外的努力(至少在QT5.1 QML i中使用)。
class MyClass {
public slots:
void doSomething(String info);