我正在尝试使用QQmlListProperty从QQuickItem中公开QList-并遵循以下文档:

  • Properties with Object-List Types
  • QQmlListProperty Class

  • 一个简化的例子:
    #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>'
    

    我还尝试用int的QList替换Vurm的QList-问题似乎出在Qt在QQmlListProperty<T>(this, &m_vurms);中所做的事情中

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

    最佳答案

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

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

    考虑到const的构造函数需要一个非const指针,我还必须删除QQmlListProperty限定符才能进行编译,这很有意义。当您尝试删除它时,错误可能仍然存在,因为您仍在传递指针。

    关于c++ - 尝试使用QQmlListProperty时出现Qt编译器错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43163602/

    10-11 18:01