如何<double>从基于 QObject 的类方法返回 QList 以在 Qt 脚本中使用



我正在Qt中开发一个使用QScript模块的应用程序。我正在处理的类是从QObject派生的,因此它将是"可脚本化的"。其中一个方法应该返回一个双值列表(QList)。当我使用engine.newQObject(class_instance)创建一个带有该类一个实例的全局脚本对象时,我可以很好地访问该脚本对象的许多方法,表明该过程正在运行。我可以从脚本中调用一个返回double的方法,但应该返回QList的函数保持沉默。

你知道我如何实现C++类的方法,让它忠实地返回双值列表吗?

代码:

类代码(QCustomPlot源自QWidget)

class AbstractPlotWidget : public QCustomPlot
{
Q_OBJECT;

函数,用于返回一个双值列表:

(声明为Q_INVOKABLE)

QList<double> 
AbstractPlotWidget::keys()
{
QList<double> keyList;
QCPDataMap *data = graph()->data();
return data->keys();
}

当我运行该函数时,我在脚本控制台中得到的只是:QVariant(QList)

我精心制作了以下测试函数,该函数返回表示双值列表的QStringList:

(声明为Q_INVOKABLE)

QStringList
AbstractPlotWidget::keysAsStringList()
{
QStringList keyStringList;
QCPDataMap *data = graph()->data();
QList<double> keyList = data->keys();
for(int iter = 0; iter < keyList.size(); ++iter)
{
double keyValue = keyList.at(iter);
keyStringList.append(QString("%1n").arg(keyValue));
}
return keyStringList;
}

当我运行该函数时,脚本控制台会有效地显示带有逗号分隔的双值的文本。

我还编写了一个返回单个双值的简单函数,该函数也能工作。另一个测试函数返回一个QList<int>工作。

所以我想,QList<double>和相应的脚本值之间没有自动转换。看起来我需要一种方法让QScriptEngine实例知道如何将QList<double>转换为QtScript变量。

感谢

您需要注册类型。参见此处

(TL、DR:使用

qScriptRegisterSequenceMetaType< QList<double> >(_engine);

其中_engine是一个QScriptEngine。注册的好时机是创建引擎。)

因为这是一种标准的容器类型,所以这几乎就是你所需要做的

对于更复杂的类型(例如,您自己的类),您可以使用qScriptRegisterMetaType,并提供自定义函数以在引擎环境中进行转换。

相关内容

最新更新