我正在 Qt 中开发一个使用 QScript 模块的应用程序。我正在处理的类是从 QObject 派生的,因此它将是“可编写脚本的”。其中一种方法应该返回一个双精度值列表(QList)。当我使用类的一个实例创建一个全局脚本对象时,使用 engine.newQObject(class_instance)),我可以完美地访问脚本对象的许多方法,表明该过程正在运行。我可以从脚本中调用一个返回双精度的方法,但应该返回 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("%1\n").arg(keyValue));
}
return keyStringList;
}
当我运行该函数时,脚本控制台有效地显示带有逗号分隔的双精度值的文本。
我还编写了一个返回单个双精度值的简单函数,它也可以工作。另一个测试函数返回一个QList<int>
作品。
QList<double>
所以我猜,和相应的脚本值之间没有自动转换。看起来我需要一种方法让 QScriptEngine 实例知道如何转换QList<double>
为 Qt Script 变量。
谢谢