在我的主窗体之外使用 QtScript
Using QtScript outside my main form
我正在使用Qt5,并试图学习如何使应用程序具有脚本性。
为此,我创建了一个主窗口,其中包含一些文本编辑,标签等。然后,我在该表单的菜单中添加了一个名为"脚本控制台"的选项,以便我打开第二个表单,该表单仅包含文本编辑和一个名为"评估"的按钮。
我的目标是能够使用第二种形式,并通过Qt脚本引擎能够从我的主表单中设置或获取值,并且通常能够编写各种函数的脚本。
我尝试做的是像这样设置引擎
scriptingconsole::scriptingconsole(QWidget *parent) :
QDialog(parent),
ui(new Ui::scriptingconsole)
{
ui->setupUi(this);
QScriptValue appContext = myScriptEngine.newQObject(parent);
myScriptEngine.globalObject().setProperty("app", appContext);
}
不过我没有得到我所期望的。
如果我尝试计算表达式"app",我会得到 null 作为输出。
如果我将 myScriptEngine.newQObject(parent) 与当前类中的对象一起使用,这工作正常(如果我输入的不是父级),但我也希望能够访问其他类中的对象(希望是我的应用程序通常使用的所有公共插槽)。
有谁知道我在这里做错了什么以及如何使用我的脚本控制台类从我的主窗口访问公共插槽?
了?
我想这是因为您没有明确地将指向您的主窗体的指针传递给您的scriptingconsole
的构造函数。这就是为什么你因此而NULL
。(NULL
是默认值,正如您可以在每个QWidget
构造函数中看到QWidget *parent = 0
)
如果对象未动态实例化,则会发生这种情况。
溶液
在主窗体中动态分配scriptingconsole
:
scriptingconsole* myScriptConsole;
//...
myScriptConsole = new scriptingconsole(this);
// ^^^^
// pass the pointer which points to parent widget
QScriptEngine的Qt文档::newQObject说:
创建一个 QtScript 对象,该对象使用给定的所有权包装给定的 QObject 对象。给定的选项控制与生成的脚本对象交互的各个方面。
http://qt-project.org/doc/qt-4.8/qscriptengine.html#newQObject
即它包装了一个 QObject.. 无论出于何种原因,您可能都将 NULL 传递给 newQObject。 尝试设置断点并评估"parent"的值。
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为什么我的 std::ref 无法按预期工作?
- clang整洁10忽略了我的NOLINT命令
- 在我的主窗体之外使用 QtScript