C++ QT快速应用程序窗口嵌入C++;对象

C++ QT快速应用程序窗口嵌入C++;对象,c++,qt,qtquick2,C++,Qt,Qtquick2,我有QT快2.2代码>应用程序窗口< /C> >,我想在这个代码>应用程序窗口< /COD> C++对象中使用.< 我知道QQuickViewview,但这只适用于从QQuickItem派生的对象(不适用于ApplicationWindow) 我也知道QMLReistPyType < /C> >,但这只是在QML中添加了一个通用C++类。我只想在应用程序窗口< /code >中有一个C++对象(C++代码实例化)。 有可能在C++ Quest< 2.2代码>应用程序窗口< /C> > /P>中使

我有QT快2.2代码>应用程序窗口< /C> >,我想在这个代码>应用程序窗口< /COD> C++对象中使用.< 我知道
QQuickView
view,但这只适用于从
QQuickItem
派生的对象(不适用于
ApplicationWindow

我也知道QMLReistPyType < /C> >,但这只是在QML中添加了一个通用C++类。我只想在应用程序窗口< /code >中有一个C++对象(C++代码实例化)。

有可能在C++ Quest< 2.2代码>应用程序窗口< /C> > /P>中使用C++对象吗? main.cpp

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>
#include <QQmlContext>
#include "myclass.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyClass myClass;

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

    return app.exec();
}

谢谢,这取决于你的目的。如果需要,您应该在main.cpp中执行此操作,例如:

qmlRegisterType< MyClass >("com.example.myclass", 1, 0, "MyClass");
然后,您可以从自己的数据类型创建一个项:

import QtQuick 2.2
import QtQuick.Controls 1.1
import com.example.myclass 1.0

ApplicationWindow {
    visible: true

    Text {
        text: myClass.getValue()
        anchors.centerIn: parent
   }
    MyClass {

   }

}
但你有另一个解决办法。可以将<代码> qObjult<代码>对象从C++传递到qML。< /p>
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("myClass", new MyClass);
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

现在,在您的qml文件中,您可以访问myClass对象。

阅读关于
qmlRegisterType
另外:这个问题在这里已经讨论过很多次了,尽管我找不到一个类似的被认为是重复的问题…根据您的更新,您可以在我的答案中选择我的第二个解决方案。您的第二个解决方案是我想要的。谢谢你。但是我仍然有一个小问题,我在控制台中遇到“ReferenceError:myClass未定义”。setContextProperty必须在引擎之前。load@saeed您可以更改您的解决方案引擎。加载。。。和引擎。根上下文,如果有人有同样的问题。谢谢您的帮助。@user3734670以前做过:)
qmlRegisterType< MyClass >("com.example.myclass", 1, 0, "MyClass");
import com.example.myclass 1.0
import QtQuick 2.2
import QtQuick.Controls 1.1
import com.example.myclass 1.0

ApplicationWindow {
    visible: true

    Text {
        text: myClass.getValue()
        anchors.centerIn: parent
   }
    MyClass {

   }

}
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("myClass", new MyClass);
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));