gpt4 book ai didi

c++ - 如何从基于 QObject 的类方法返回 QList 以便在 Qt 脚本中使用

转载 作者:行者123 更新时间:2023-11-28 04:57:11 26 4
gpt4 key购买 nike

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

知道如何实现 C++ 类的方法以使其忠实地返回 double 值列表吗?

代码:

类代码(QCustomPlot派生自QWidget)

class AbstractPlotWidget : public QCustomPlot
{
Q_OBJECT;

旨在返回 double 值列表的函数:

(声明为 Q_INVOKABLE)

QList<double> 
AbstractPlotWidget::keys()
{
QList<double> keyList;

QCPDataMap *data = graph()->data();

return data->keys();
}

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

我设计了以下测试函数,它返回一个表示 double 值列表的 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;
}

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

我还编写了一个返回单个 double 值的简单函数,它也可以工作。另一个测试函数返回 QList<int>有效。

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

谢谢

最佳答案

您需要注册类型。参见 here

(长话短说:使用

qScriptRegisterSequenceMetaType< QList<double> >(_engine);

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

因为它是一种标准容器类型,所以这几乎就是您需要做的所有事情。

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

关于c++ - 如何从基于 QObject 的类方法返回 QList<double> 以便在 Qt 脚本中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com