是否可以将QList<T>
从C ++公开到QML,其中T类型已被元对象系统所知?
//C++:
class Data : public QObject {
Q_OBJECT
Q_PROPERTY(QList<QGeoCoordinate> path READ path WRITE setPath NOTIFY pathChanged)
作为QML的上下文属性公开的Data实例,但在QML端路径属性未定义。 在文档中写的
特别是,QML目前支持:
QList<int> QList<qreal> QList<bool> QList<QString> and QStringList QList<QUrl>
其他序列类型不是透明支持的,而是一个 任何其他序列类型的实例将在QML和C ++之间传递 作为不透明的QVariantList。
但看起来像对QVariantList的不透明转换不起作用。 我正在使用Qt 5.6 RC快照。
答案 0 :(得分:1)
我不确定转换为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来做类似的事情,但这有其自身的后备。