gpt4 book ai didi

c++ - 在 QML 文件之间共享一个对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:05 33 4
gpt4 key购买 nike

我是 QML 编码的新手,我正在尝试编写我的第一个 Sailfish OS 应用程序。对于后端,我创建了一个 C++ 类。但是,我想实例化该 C++ 类的一个对象,并在封面和主页(两个单独的 QML 文件)中使用它,这样我就可以使用存储在该类中的相同数据。如何在单独的 QML 文件中处理同一个对象?

最佳答案

您可以使该对象在 QtQuick 上下文中可用:

class MySharedObject : public QObject {
Q_OBJECT
public:
MySharedObject(QObject * p = 0) : QObject(p) {}
public slots:
QString mySharedSlot() { return "blablabla"; }
};

在 main.cpp 中

MySharedObject obj;    
view.rootContext()->setContextProperty("sharedObject", &obj);

以及从 QML 中的任何地方:

console.log(sharedObject.mySharedSlot())

如果你不想让它在 QML 中“全局”化,你可以稍微封装一下,只需创建另一个 QObject 派生类,注册它以在 QML 中实例化并拥有其中的一个属性返回指向该对象实例的指针,这样它仅在您实例化“访问器”QML 对象的地方可用。

class SharedObjAccessor : public QObject {
Q_OBJECT
Q_PROPERTY(MySharedObject * sharedObject READ sharedObject)

public:
SharedObjAccessor(QObject * p = 0) : QObject(p) {}
MySharedObject * sharedObject() { return _obj; }
static void setSharedObject(MySharedObject * obj) { _obj = obj; }
private:
static MySharedObject * _obj; // remember to init in the cpp file
};

在 main.cpp 中

MySharedObject obj;
qRegisterMetaType<MySharedObject*>();

SharedObjAccessor::setSharedObject(&obj);
qmlRegisterType<SharedObjAccessor>("Test", 1, 0, "SharedObjAccessor");

在 QML 中

import Test 1.0
...
SharedObjAccessor {
id: acc
}
...
console.log(acc.sharedObject.mySharedSlot())

关于c++ - 在 QML 文件之间共享一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783008/

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