尝试使用QQmlListProperty时Qt编译错误

时间:2017-04-02 01:01:58

标签: c++ qt qml qlist qquickitem

我正在尝试使用QQmlListProperty在QQuickItem中公开QList - 并按照以下文档进行操作:

简化示例:

var zlib = require('zlib');
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
var params = {Bucket: <bucket>, Key: <key>};
var file = require('fs').createWriteStream(<path/to/file>);
s3.getObject(params).createReadStream().pipe(zlib.createGunzip()).pipe(file);

但是我在#include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQuickItem> #include <QList> #include <QQmlListProperty> class GameEngine : public QQuickItem { Q_OBJECT Q_PROPERTY(QQmlListProperty<QObject> vurms READ vurms) public: explicit GameEngine(QQuickItem *parent = 0) : QQuickItem(parent) { } QQmlListProperty<QObject> vurms() const { return QQmlListProperty<QObject>(this, &m_vurms); } protected: QList<QObject*> m_vurms; }; int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); return app.exec(); } #include "main.moc" 上遇到编译器错误:

return QQmlListProperty<QObject>(this, &m_vurms);

我也尝试用QList替换Vurm的QList - 这个问题似乎与Qt在main.cpp:20: error: C2440: '<function-style-cast>': cannot convert from 'initializer list' to 'QQmlListProperty<QObject>' 中所做的一样

我正在使用Qt 5.8编写/编译,并且在.pro文件中设置了C ++ 11。我在Windows 10上编译Qt Creator 4.2.1:使用MSVC 2015 64位进行编译。

1 个答案:

答案 0 :(得分:3)

我之前错过了这个,但你需要将引用作为第二个参数传递给构造函数,而不是指针:

QQmlListProperty<Vurm> GameEngine::vurms()
{
    return QQmlListProperty<Vurm>(this, m_vurms);
}

我还必须删除const限定符以使其编译,这是有意义的,因为QQmlListProperty的构造函数需要非const指针。当您尝试删除它时,错误可能仍然存在,因为您仍在传递指针。