Я пытаюсь использовать QQmlListProperty для представления QList из QQuickItem — и следую документации по адресу:
Упрощенный пример:
#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);
:
main.cpp:20: error: C2440: '<function-style-cast>': cannot convert from 'initializer list' to 'QQmlListProperty<QObject>'
Я также пытался заменить QList из Vurm на QList из int — похоже, проблема в том, что делает Qt в QQmlListProperty<T>(this, &m_vurms);
Я пишу / компилирую, используя Qt 5.8, а C ++ 11 установлен в .pro-файле. Я компилирую в Qt Creator 4.2.1 под Windows 10: использую MSVC 2015 64-bit для компиляции.
Я пропустил это раньше, но вам нужно передать ссылку в качестве второго аргумента в конструктор, а не указатель:
QQmlListProperty<Vurm> GameEngine::vurms()
{
return QQmlListProperty<Vurm>(this, m_vurms);
}
Я также должен был удалить const
квалификатор для его компиляции, что имеет смысл, учитывая, что конструктор QQmlListProperty
ожидает неконстантный указатель. Ошибка, вероятно, осталась, когда вы пытались удалить ее, потому что вы все еще передавали указатель.
Других решений пока нет …