gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:43:14 24 4
gpt4 key购买 nike

我有一个 QT Quick 2.2 ApplicationWindow,我想在这个 ApplicationWindow 中使用一个 C++ 对象。

我知道 QQuickView View ,但这只适用于派生自 QQuickItem 的对象(不适用于 ApplicationWindow)。

我也知道qmlRegisterType,但这只是在QML中添加了一个通用的C++类。我只想在 ApplicationWindow 中有一个 C++ 对象(在 C++ 代码中实例化)。

是否有可能在 QT Quick 2.2 ApplicationWindow 中使用 C++ 对象?

主要.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();
}

我的类.h

#include <QObject>
#include <QString>

class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0) {};
Q_INVOKABLE QString getValue();
};

我的类.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
}
}

谢谢

最佳答案

这取决于您的目的。如果你想define QML type from C++,例如,您应该在 main.cpp 中执行此操作:

qmlRegisterType< MyClass >("com.example.myclass", 1, 0, "MyClass");

现在在您的 .qml 文件中,首先您需要使用 import 语句导入新创建的数据类型:

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 {

}

}

但你有另一种解决方案。您可以将 QObject 对象从 C++ 传递到 QML。

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

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

关于c++ - QT 快速应用程序窗口嵌入 C++ 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com