Ошибка компилятора Qt при попытке использовать QQmlListProperty

Я пытаюсь использовать 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 для компиляции.

1

Решение

Я пропустил это раньше, но вам нужно передать ссылку в качестве второго аргумента в конструктор, а не указатель:

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

Я также должен был удалить const квалификатор для его компиляции, что имеет смысл, учитывая, что конструктор QQmlListProperty ожидает неконстантный указатель. Ошибка, вероятно, осталась, когда вы пытались удалить ее, потому что вы все еще передавали указатель.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]