这是一种常用的交互方式,直接上代码;
main.cpp中将单例类注册进去,这个单例有点不单例,大家可以根据情况修改
// 单例
qmlRegisterSingletonType("MySingleApi", 1, 0, "MyApi", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QJSValue {
Q_UNUSED(engine)
static int seedValue = 5;
QJSValue example = scriptEngine->newObject();
example.setProperty("someProperty", seedValue++);
return example;
});
// 1: 注册号,23,主次版本号,调用名,单例的返回函数
qmlRegisterSingletonType<MySingleton>("MySingleApi", 1, 0, "MySingleApi", instance);
cpp文件:
class MySingleton : public QObject
{
Q_OBJECT
Q_PROPERTY(int someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged)
public:
explicit MySingleton(QObject* parent = nullptr);
MySingleton* instance(); // 获取单例实例
// 添加其他成员函数和属性...
Q_INVOKABLE int doSomething() {
setSomeProperty(5);
return m_someProperty;
}
int someProperty() const { return m_someProperty; }
void setSomeProperty(int val) {
m_someProperty = val;
emit somePropertyChanged(val);
}
signals:
void somePropertyChanged(int newValue);
private:
static MySingleton *m_instance; // 单例实例
int m_someProperty; // 数据
};
、、 --------------------------------------------
MySingleton* MySingleton::m_instance = nullptr;
MySingleton *MySingleton::instance()
{
// SingletonTypeExample *example = new SingletonTypeExample();
// return example;
static MySingleton *ins = new MySingleton;
return ins;
}
MySingleton::MySingleton(QObject* parent) : QObject(parent)
{
// 初始化单例
}
qml文件:
// 单例,导入的方式
import MySingleApi 1.0
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
property int someValue: MySingleApi.doSomething()
}