我有一个功能齐全的QT应用程序,有几个按钮。
我需要直接从javascript控制我的应用程序,如以下示例,其中AccessControl是我的QObject类:
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。
感谢。
答案 0 :(得分:1)
您可以将类连接到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 ++中的表现。以下是插槽http://qt-project.org/doc/qt-4.8/signalsandslots.html的链接。 QWebFrame可以将对象添加到javascript并运行javascript代码。
class MyClass {
public slots:
void doSomething(String info);
答案 1 :(得分:0)
我找到了一个非常好的例子,他帮助了我很多。
您可以在此处找到代码:QTScriptTest
杰伊和贾斯汀的回答是正确的,如果函数在“公共插槽”中,它将可以从脚本访问。我的工作代码:
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);
}
}
以Justin为例:
class MyClass {
public slots:
void doSomething(String info);
现在它运行正常,每次按Enter键都会评估我的脚本,因此,我可以修改我的脚本而不关闭我的应用程序,只需重新评估它。