【CXX-Qt】2.3 类型

打印 上一主题 下一主题

主题 994|帖子 994|积分 2982

CXX-Qt 支持大多数 CXX 支持的类型。这些类型可以用于属性、可调用方法和信号中。
cxx-qt-lib 类型

cxx-qt-lib crate 提供了常见 Qt 类型的 CXX 绑定。
使用 cxx-qt-lib 文档 来探索可用的类型。
容器类型

cxx-qt-lib crate 提供了容器类型,例如 QSet。
要使用这些类型,请在 CXX 桥接中定义一个模板化类型,但请注意,类型名称必须为 QSet_T,由于这必要与 C++ 代码中的名称匹配。
例如,对于 QSet,类型名称应为 QSet_i32。
  1. unsafe extern "C++" {
  2.     include!("cxx-qt-lib/qset.h");
  3.     type QSet_i32 = cxx_qt_lib::QSet<i32>;
  4. }
复制代码
对于基于键值的容器类型(如 QHash<K, V>),必要在 Rust 端定义一个中间类型,以便为键值组合实现 trait。
与其他容器类型一样,类型名称必须为 QHash_K_V,由于这必要与 C++ 代码中的名称匹配。
例如,对于 QHash<QString, QVariant>,定义一个名为 QHashPair_QString_QVariant 的中间类型。然后使用类型名称 QHash_QString_QVariant 来匹配 C++ 端。
  1. unsafe extern "C++" {
  2.     include!("cxx-qt-lib/qhash.h");
  3.     type QHash_QString_QVariant = cxx_qt_lib::QHash<cxx_qt_lib::QHashPair_QString_QVariant>;
  4. }
复制代码
请注意,可以通过在 Rust 中使用匹配的类型(例如 QMap<QString, QVariant>)来使用类型别名(如 QVariantMap)。
定义自定义类型

任何有用的 CXX 类型都应该可以与 CXX-Qt 一起使用。
请注意,适用与 CXX 雷同的规则,因此类型必须是可平凡传递的。如果它们是不透明类型,则必须使用引用或指针。
有关如何包装 Qt 对象的示例,请参阅 cxx-qt-lib 源代码。
在容器或 QVariant 中使用自定义类型

要在容器中使用自定义类型,请找到容器使用的 trait。例如,对于 QSet,有一个 QSetElement trait;对于 QHash<K, V>,有一个 QHashPair trait。
为你的自定义类型实现相应的 trait,然后就可以像上面描述的那样使用容器。
要在 QVariant 中使用自定义类型,请为你的自定义类型实现 QVariantValue trait,如下所示,然后就可以正常使用了。
  1. impl cxx_qt_lib::QVariantValue for ffi::CustomStruct {
  2.     fn can_convert(variant: &cxx_qt_lib::QVariant) -> bool {
  3.         ffi::qvariant_can_convert_custom_type(variant)
  4.     }
  5.     fn construct(value: &Self) -> cxx_qt_lib::QVariant {
  6.         ffi::qvariant_construct_custom_type(value)
  7.     }
  8.     fn value_or_default(variant: &cxx_qt_lib::QVariant) -> Self {
  9.         ffi::qvariant_value_or_default_custom_type(variant)
  10.     }
  11. }
复制代码
在 qml_features 类型示例 中展示了如何使用 QVariant 实现自定义结构体的完整示例。
别的,任何 C++ 中的自定义类型或别名都应使用 qRegisterMetaType(“TYPE”) 在 Qt 中注册,以确保它们可以与 QML 一起使用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表