C ++ не находит QML StackView - PullRequest
0 голосов
/ 01 мая 2020

Мне нужно набрать sh страницу qml для просмотра стека с другой страницы qml. Поэтому я использую c ++ - qml, взаимодействующий для решения этой проблемы. Мой код C ++ находит элемент страницы, но не находит stackView.

main. cpp:

int main(int argc, char *argv[])
{
    ...

    QQmlEngine engine;
    QQmlComponent component(&engine, QUrl("qrc:/qml/main.qml"));
    QObject* object = component.create();

    Settings::defineObject(object);
    return app.exec();
}

settings.h:

class Settings : public QObject
{
    Q_OBJECT
private:
    static QObject* object;
public:
    ...
    Q_INVOKABLE void push(QString fileName);
    static void defineObject(QObject* obj);
};

settings. cpp:

QObject* Settings::object = nullptr;

...

void Settings::push(QString fileName)
{
    if (Settings::object == nullptr) QCoreApplication::exit(-3);
    QObject* page = Settings::object->findChild<QObject*>("page");

    if (!page) QCoreApplication::exit(-4);
    QObject* stackView = page->findChild<QObject*>("stackView");

    if (!stackView) QCoreApplication::exit(-5);
    QMetaObject::invokeMethod(stackView, "push", Q_ARG(QString, fileName));
}

void Settings::defineObject(QObject* obj)
{
    object = obj;
}

main.qml:

ApplicationWindow {
    ...

    Page {
        id: page
        ...

       StackView {
            id: stackView
            initialItem: "Home.qml"
            anchors.fill: parent
        }
    }
}

Моя программа всегда выходит из кода -5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...