C++ QT快速应用程序窗口嵌入C++;对象
我有QT快2.2代码>应用程序窗口< /C> >,我想在这个代码>应用程序窗口< /COD> 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>中使
QQuickView
view,但这只适用于从QQuickItem
派生的对象(不适用于ApplicationWindow
)
我也知道 有可能在C++ Quest< 2.2代码>应用程序窗口< /C> > /P>中使用C++对象吗?
main.cpp应用程序窗口< /code >中有一个C++对象(C++代码实例化)。
#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")));