QtQuick: QQmlApplicationEngine не удалось загрузить компонент qrc: /main.qml: 23 Недопустимое назначение прикрепленного объекта

Учитывая мои мысли ниже, я лаю не на то дерево? Или предоставил информацию ниже, я неправильно использую Qt API, чтобы получить ошибку в заголовке?

Я пытаюсь изменить образец на http://doc.qt.io/qt-5/qtquick-scenegraph-openglunderqml-example.html для работы с проектом QtQuick по умолчанию, созданным с помощью Qt Creator 3.3.0 (с открытым исходным кодом) на основе Qt 5.4.0 (GCC 4.6.1, 64 немного).

После просмотра кода первое, что мне бросилось в глаза, это:

В примерах main.cpp используются:

qmlRegisterType<Squircle>("OpenGLUnderQML", 1, 0, "Squircle");

QQuickView view;
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.setSource(QUrl("qrc:///scenegraph/openglunderqml/main.qml"));
view.show();

С некоторым переименованием мой main.cpp использует

qmlRegisterType<MainScreen>("OpenGLUnderQML", 1, 0, "MainScreen");

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

Я не уверен, может ли разница в использовании QQmlApplicationEngine по сравнению с QuickView вызывать мою ошибку:

QQmlApplicationEngine не удалось загрузить компонент qrc: /main.qml: 23
Неверное назначение прикрепленного объекта

Где мой main.qml выглядит так:

import QtQuick 2.4
import QtQuick.Window 2.2
import OpenGLUnderQML 1.0
import "qmlmodel"

Window {
    id: mainWindow
    width: 800
    height: 600
    visible: true
    color: "black"
    title: "Army Calculator"
    objectName: "mainWindow"

    ListView {
        id: mainListView
        anchors.fill: parent
        objectName: "mainListView"
    }

    MainScreen {
        SequentialAnimation on DeltaT {
            NumberAnimation { to: 1; duration: 2500; easing.type: Easing.InQuad }
            NumberAnimation { to: 0; duration: 2500; easing.type: Easing.OutQuad }
            loops: Animation.Infinite
            running: true
        }
    }
}

и в образце используются:

import QtQuick 2.0
import OpenGLUnderQML 1.0

Item {

    width: 320
    height: 480

    Squircle {
        SequentialAnimation on t {
            NumberAnimation { to: 1; duration: 2500; easing.type: Easing.InQuad }
            NumberAnimation { to: 0; duration: 2500; easing.type: Easing.OutQuad }
            loops: Animation.Infinite
            running: true
        }
    }
    Rectangle {
        color: Qt.rgba(1, 1, 1, 0.7)
        radius: 10
        border.width: 1
        border.color: "white"
        anchors.fill: label
        anchors.margins: -10
    }

    Text {
        id: label
        color: "black"
        wrapMode: Text.WordWrap
        text: "The background here is a squircle rendered with raw OpenGL using the 'beforeRender()' signal in QQuickWindow. This text label and its border is rendered using QML"
        anchors.right: parent.right
        anchors.left: parent.left
        anchors.bottom: parent.bottom
        anchors.margins: 20
    }
}

Согласно запросу в комментарии ниже MainScreen.h является

#ifndef MAINSCREEN_H
#define MAINSCREEN_H

#include <QQuickItem>

class MainScreenRenderer;
class QQuickWindow;

class MainScreen : public QQuickItem
{
    Q_OBJECT
    Q_PROPERTY(qreal DeltaT READ getDeltaT WRITE setDeltaT NOTIFY deltaTChanged)

public:
    MainScreen();
    ~MainScreen();

    qreal getDeltaT() const;
    void setDeltaT(qreal deltaT);

signals:
    void deltaTChanged();

public slots:
    void sync();
    void cleanup();

private slots:
    void handleWindowChanged(QQuickWindow *win);

private:
    qreal m_DeltaT;
    MainScreenRenderer *m_Renderer;
};


#endif // MAINSCREEN_H

person Matthew Hoggan    schedule 28.02.2015    source источник
comment
Покажите заголовочный файл MainScreen.   -  person Meefte    schedule 28.02.2015
comment
Название вашей собственности должно начинаться с строчной буквы.   -  person Meefte    schedule 28.02.2015
comment
Пожалуйста, опубликуйте свой ответ. Значит, мне нужно изменить DeltaT на deltaT?   -  person Matthew Hoggan    schedule 28.02.2015
comment
Панировочные сухари для других: у меня была ColumnLayout{ Text: { text: "foo"} }, и я получил эту ошибку. Я не должен был иметь : после Text. Это не свойство ColumnLayout, это просто вложенный объект. Должно быть ColumnLayout{ Text { text: "foo"} } без : после Text.   -  person Ross Rogers    schedule 29.11.2016


Ответы (1)


Название свойства должно начинаться с строчной буквы. Вам необходимо изменить DeltaT на deltaT.

MainScreen.h

Q_PROPERTY(qreal deltaT READ getDeltaT WRITE setDeltaT NOTIFY deltaTChanged)

main.qml

MainScreen {
    SequentialAnimation on deltaT {

    }
}
person Meefte    schedule 28.02.2015