【发布时间】:2025-12-10 17:20:03
【问题描述】:
我有一个 QT Quick 2.2 ApplicationWindow,我想在这个 ApplicationWindow 中使用一个 C++ 对象。
我知道QQuickView 视图,但这仅适用于派生自QQuickItem 的对象(不适用于ApplicationWindow)。
我也知道qmlRegisterType,但这只会在 QML 中添加一个通用的 C++ 类。我只想在ApplicationWindow 中有一个 C++ 对象(在 C++ 代码中实例化)。
是否有可能在 QT Quick 2.2 ApplicationWindow 中使用 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();
}
myclass.h
#include <QObject>
#include <QString>
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0) {};
Q_INVOKABLE QString getValue();
};
myclass.cpp
#include "myclass.h"
#include <QString>
QString MyClass::getValue() {
return "42";
}
qrc:///main.qml
import QtQuick 2.2
import QtQuick.Controls 1.1
ApplicationWindow {
visible: true
Text {
text: myClass.getValue()
anchors.centerIn: parent
}
}
谢谢
【问题讨论】:
-
了解
qmlRegisterType -
另外:qt-project.org/doc/qt-5/qtqml-cppintegration-topic.html 这个问题在这里已经讨论过很多次了,虽然我找不到一个类似的会被认为是重复的......
-
根据您的更新,您可以在我的回答中选择我的第二个解决方案。