阅读了SCXML 调用示例后,我问自己如果要调用使用qscxmlc
. 我注意到可以通过使用标签src
中的属性来调用另一个状态机。invoke
我通过设置src
SCXML 文件的文件系统路径来完成这项工作。但是,我无法弄清楚如何在 Qt 资源中引用 SCXML 文件(使用qrc:///...
不起作用)或如何调用已编译的状态机。
更新
我在 Qt 的文档中找不到任何内容,所以我查看了源代码(5.8 版):
加载qscxmlcompiler.cpp
在QScxmlCompilerPrivate::DefaultLoader::load(..)
(第 2447 行)中实现:
const QUrl url(name);
if (!url.isLocalFile() && !url.isRelative())
errs << QStringLiteral("src attribute is not a local file (%1)").arg(name);
QFileInfo fInfo = url.isLocalFile() ? url.toLocalFile() : name;
#endif // BUILD_QSCXMLC
if (fInfo.isRelative())
fInfo = QFileInfo(QDir(baseDir).filePath(fInfo.filePath()));
// ...
我注意到它使用 QUrl,因此应该能够使用我尝试使用的资源:/mystatemachinefile.scxml
而不是rsc://mystatemachinefile.scxm
它并且它有效:) 但是这应该添加到文档恕我直言。
我仍然想知道如果您想在使用状态图之前对其进行编译,应该如何实现它们,但我想这目前是不可能的?