当前位置: 首页 > news >正文

广告公司网站首页时代强个人网站

广告公司网站首页,时代强个人网站,专业的集团网站开发费用多少钱,宝安关于网站建设Rust Qt 对象可以作为属性或参数相互嵌套。 嵌套对象通过指向其 QObject 表示的指针来引用。 首先,在桥接模块的 extern 块中正常定义一个类型。 extern "RustQt" {#[qobject]#[qml_element]#[qproperty(i32, counter)]type InnerObject super::Inner…

Rust Qt 对象可以作为属性或参数相互嵌套。

嵌套对象通过指向其 QObject 表示的指针来引用。

首先,在桥接模块的 extern 块中正常定义一个类型。

extern "RustQt" {#[qobject]#[qml_element]#[qproperty(i32, counter)]type InnerObject = super::InnerObjectRust;
}

然后,可以通过使用 *mut T 将其作为属性、可调用方法的参数或信号参数使用。如下例所示,将 InnerObject 嵌套到 OuterObject 中。

需要使用 C++ CXX 类型作为 `T` 类型,而不是 Rust 结构体。
要访问嵌套对象的可变可调用方法和属性设置器,需要将 `*mut T` 转换为 `Pin<&mut T>`。
#[cxx_qt::bridge]
pub mod qobject {extern "RustQt" {#[qobject]#[qml_element]#[qproperty(i32, counter)]type InnerObject = super::InnerObjectRust;}extern "RustQt" {/// 一个信号,展示如何将另一个 QObject 作为参数引用////// # 安全性////// 由于使用了裸指针,这在 CXX 中被视为不安全#[qsignal]unsafe fn called(self: Pin<&mut InnerObject>, inner: *mut InnerObject);}extern "RustQt" {#[qobject]#[qml_element]#[qproperty(*mut InnerObject, inner)]type OuterObject = super::OuterObjectRust;/// 一个信号,展示如何将另一个 QObject 作为参数引用////// # 安全性////// 由于使用了裸指针,这在 CXX 中被视为不安全#[qsignal]unsafe fn called(self: Pin<&mut OuterObject>, inner: *mut InnerObject);}unsafe extern "RustQt" {/// 打印给定内部 QObject 的计数////// # 安全性////// 由于在公共方法中解引用指针,这需要标记为不安全#[qinvokable]#[cxx_name = "printCount"]unsafe fn print_count(self: Pin<&mut OuterObject>, inner: *mut InnerObject);/// 重置存储在 Q_PROPERTY 中的内部 QObject 的计数器#[qinvokable]fn reset(self: Pin<&mut OuterObject>);}impl cxx_qt::Constructor<()> for OuterObject {}
}use core::pin::Pin;/// 内部 QObject
#[derive(Default)]
pub struct InnerObjectRust {counter: i32,
}/// 外部 QObject,具有指向内部 QObject 的 Q_PROPERTY
pub struct OuterObjectRust {inner: *mut qobject::InnerObject,
}impl Default for OuterObjectRust {fn default() -> Self {Self {inner: std::ptr::null_mut(),}}
}impl qobject::OuterObject {/// 打印给定内部 QObject 的计数////// # 安全性////// 由于在公共方法中解引用指针,这需要标记为不安全pub unsafe fn print_count(self: Pin<&mut Self>, inner: *mut qobject::InnerObject) {if let Some(inner) = inner.as_ref() {println!("内部对象的计数器属性: {}", inner.counter());}self.called(inner);}/// 重置存储在 Q_PROPERTY 中的内部 QObject 的计数器pub fn reset(self: Pin<&mut Self>) {// 需要将 *mut T 转换为 Pin<&mut T>,以便访问方法if let Some(inner) = unsafe { self.inner().as_mut() } {let pinned_inner = unsafe { Pin::new_unchecked(inner) };// 现在可以像平常一样使用 pinned_innerpinned_inner.set_counter(10);}// 获取 *mut Tlet inner = *self.inner();unsafe { self.called(inner) };}
}impl cxx_qt::Initialize for qobject::OuterObject {/// 初始化 QObject,将一个信号连接到另一个信号fn initialize(self: core::pin::Pin<&mut Self>) {// 示例:将一个 QObject 的信号连接到另一个 QObject 的信号// 这将触发 OuterObject::Called 以触发 InnerObject::Calledself.on_called(|qobject, obj| {// 需要将 *mut T 转换为 Pin<&mut T>,以便访问方法if let Some(inner) = unsafe { qobject.inner().as_mut() } {let pinned_inner = unsafe { Pin::new_unchecked(inner) };// 现在可以像平常一样使用 pinned_innerunsafe {pinned_inner.called(obj);}}}).release();}
}
http://www.dtcms.com/a/425533.html

相关文章:

  • 利用博客做网站排名python基础教程第二版
  • 通州网站建设多少钱中国网站建设银行-个人客户
  • 对网站进行seo优化国内 响应式网站
  • 飞翔时代网站建设外贸网站外包
  • 工厂招工信息杭州seo推广排名稳定
  • 一个彩票网站建设wordpress删除
  • 南宁网站建设q479185700惠电子商务网站软件建设的核心是
  • 企业网站制作免费下载专业定制网吧桌椅
  • iis怎么部署网站长沙app开发制作公司
  • 网站建设实训心得 总结北京网站优化公司
  • 手机网站一键分享百度指数官网登录
  • 建成局网站建设网站建设doc
  • 昆明专业网站营销技术支持::天空网络-临汾做网站
  • 太仓市住房和城乡建设局官方网站天津滨海新区天气预报
  • 男女做那个是的视频网站大连网站建设服务
  • WordPress需要编程知识吗顺义网站优化
  • 公司网站建设劳伦陕西建设招聘信息网站
  • 深圳高端网站建设报价科技vi设计
  • 正规的合肥网站建设价格抖音开放平台申请
  • 手机网站seo优化网络工程师教程
  • 网站项目申报书建设规模西安电子科技大学信息化建设处网站
  • 成年男女做羞羞视频网站深圳网站建设工作
  • 主机怎么做网站二次跳转班级网站建设主题
  • 做企业网站建设公司哪家好用dw做网站的基本步骤
  • 做旅游的网站那个便宜学校网站设计思路
  • 深圳英文建站公司企业网站策划
  • linux 网站备份婚纱网站策划书模板
  • icp备案系统网站哈尔滨网站建设如何
  • 有什么网站可以做运动站长工具seo综合查询怎么关闭
  • 南宁品牌网站建设公司山东网站营销