将C++类公开给QML
expose C++ class to QML
我有这段代码。
class Pet
{
public:
Pet(const QString& nm)
: name(nm)
{}
const QString& name() const { return nm; }
private:
QString nm;
}
class Dog : public QObject, public Pet
{
Q_OBJECT
public:
Dog(QObject* prnt)
: QBject(prnt),
Pet("Tommy")
{}
}
将其暴露于QML
QQmlApplicationEngine engine;
engine.rootContext()->setProperty("petDog", new Dog(&engine));
//QML项目
console.log(petDog.name()) // TypeError: Property 'name' of object Dog(0x0XXXXX) is not a function
将C++类的所有方法公开给QML的解决方案是什么?感谢
元对象系统必须知道这些方法才能从QML调用。这意味着一种方法必须是:
- 信号(
Q_SIGNAL
),或者 - 时隙(
Q_SLOT
),或者 - 可调用(
Q_INVOKABLE
)
在Qt 5中,槽和可调用方法之间的区别仅在于,当您迭代其元对象数据时,该方法是否列在槽中。除此之外,槽和可调用方法是等效的。
在Qt 5中,您可以将connect
从C++传递到任何方法,即使它不是槽/可调用的,但这样的方法只为C++编译器所知,而不是QML所知。
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- Qt QML桌面应用程序自动化测试