阅读SCXML invoke example我问自己,如果要调用使用qscxmlc
编译为C ++代码的状态机,这应该如何工作。我注意到可以使用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
的资源而且它有效:)但是这应该添加到文档恕我直言。
我仍然想知道如果你想在使用它们之前编译它们你应该如何实现状态图表,但我想这是不可能的呢?