gpt4 book ai didi

C++/QML序列数据交换

转载 作者:行者123 更新时间:2023-11-30 05:31:57 25 4
gpt4 key购买 nike

是否可以公开QList<T>从 C++ 到 QML,其中 T 类型被元对象系统识别?

//C++:
class Data : public QObject {
Q_OBJECT
Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged)

作为上下文属性公开给 QML 的数据实例,但在 QML 侧路径属性未定义。在文档中编写

In particular, QML currently supports:

QList<int>
QList<qreal>
QList<bool>
QList<QString> and QStringList
QList<QUrl>

Other sequence types are not supported transparently, and instead an instance of any other sequence type will be passed between QML and C++ as an opaque QVariantList.

但看起来像 QVariantList 的不透明转换不起作用。我正在使用 Qt 5.6 RC 快照。

最佳答案

我不确定转换为 QVariantList 究竟应该发生什么。我不明白您如何能够访问列表的内容,因为包含的类型不是 QObject。我认为那里的文档可以更清楚。

您可以使用 QQmlListProperty相反,虽然。 Extending QML using Qt C++有更多关于其使用的信息。这是该示例源代码中的 directory.cpp:

/*
Function to append data into list property
*/
void appendFiles(QQmlListProperty<File> *property, File *file)
{
Q_UNUSED(property)
Q_UNUSED(file)
// Do nothing. can't add to a directory using this method
}

/*
Function called to retrieve file in the list using an index
*/
File* fileAt(QQmlListProperty<File> *property, int index)
{
return static_cast< QList<File *> *>(property->data)->at(index);
}

/*
Returns the number of files in the list
*/
int filesSize(QQmlListProperty<File> *property)
{
return static_cast< QList<File *> *>(property->data)->size();
}

/*
Function called to empty the list property contents
*/
void clearFilesPtr(QQmlListProperty<File> *property)
{
return static_cast< QList<File *> *>(property->data)->clear();
}

/*
Returns the list of files as a QQmlListProperty.
*/
QQmlListProperty<File> Directory::files()
{
refresh();
return QQmlListProperty<File>(this, &m_fileList, &appendFiles, &filesSize, &fileAt, &clearFilesPtr);
}

您也可以通过公开 QList of QObject-derived types 来做类似的事情,但这有其自身的后备措施。

关于C++/QML序列数据交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35358009/

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