gpt4 book ai didi

c++ - Qt:如何从 C++ 检查对象是否为 QML 类型 Foo

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:10 25 4
gpt4 key购买 nike

考虑一个 QML 类型(在 QML 中定义,而不是在 C++ 中):

Foo {
}

假设我在 C++ 中有一个 QQuickItem* item 变量。 如何检查变量是否为 Foo 类型?

如果 Foo 是 C++ 类型,我可以这样做:

qobject_cast<Foo*>(item) == nullptr

由于 Foo 是一种 QML 类型,一个选项是

item->metaObject()->className().beginsWith("Foo")

(className() 返回类似于 Foo_QMLTYPE_0)

但这似乎不可靠且不可靠。

最佳答案

您可以使用魔法键属性:

Foo {
property bool isFoo : true
}

然后从 C++:

if (obj->property("isFoo").toBool())

如果对象没有那个属性,那么条件应该失败。这也适用于“派生”对象,因为该属性将被“继承”,例如,如果某些东西扩展 Foo 但不一定命名为 FooSomething 而是 SomethingFoo

当然,会有一些开销,这在需要对许多实例进行大量类型检查的情况下会很明显。我倾向于做的是在 C++ 级别上高效实现单个 quint32 type 属性,然后从 QML 中在需要类型信息的对象中明确设置。这种方式可以最大限度地减少开销,而且访问起来也比使用 property(name) 更快。​​

关于c++ - Qt:如何从 C++ 检查对象是否为 QML 类型 Foo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41720757/

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