QML:如何从 C++ 中读取 QList

Posted

技术标签:

【中文标题】QML:如何从 C++ 中读取 QList【英文标题】:QML : How to read a QList from C++ 【发布时间】:2011-06-22 10:08:28 【问题描述】:

我有一个简单的需求:我定义了一个 C++ 类

class MyClass: public QDeclarativeItem

  Q_OBJECT
  public:
    MyClass(QDeclarativeItem * parent=0);
    ...

  private:
    QList<QString> mList

当然,我已经注册了它:qmlRegisterType&lt;MyClass&gt;(...)

我想在 QML 代码中访问我的QList&lt;QString&gt; mList。我该怎么做?

这让我很恼火,因为它看起来像一个简单的问题,但我找不到任何关于此的信息。 (我可以创建一个 Q_INVOKABLE 插槽,但我无法读取结果等...)

编辑:QML supported Data Types

【问题讨论】:

【参考方案1】:

我不认为 QList 是 Qt 的 QML 绑定支持的数据类型。我在使用 QtWebkit 桥接 C++ 和 javascript 时遇到了类似的问题。

如果可能,请尝试使用QVariantList 而不是QList。虽然这在技术上是 QList&lt;QVariant&gt; 的 typedef,但我认为它应该可以工作。

【讨论】:

据此:qt-project.org/doc/qt-5/qtqml-cppintegration-data.htmlQList C++ sequence types are supported transparently in QML as JavaScript Array types【参考方案2】:

如果您在列表中需要自定义类型(不仅仅是字符串或其他基本类型),则可以使用 QDeclarativeListProperty。

不过比较复杂,见http://doc.qt.nokia.com/4.7/declarative-tutorials-extending-chapter5-listproperties.html

【讨论】:

以上是关于QML:如何从 C++ 中读取 QList的主要内容,如果未能解决你的问题,请参考以下文章

qml 使用中继器从 Qlist 绘制折线图

在 QML 中读取 QList<QPoint>

Qml c++ 不同的委托 qt mvc

如何从 C++ 的文本字段中读取文本

如何在 QML 中访问基于 QObjectList 的模型中的某些元素

如何将组件指针从 QML 传递到 C++?