在之前我写过如何调用函数,当时的属性都是手搓的,也就是自己写成员变量、变化信号和读写函数,但其实有一个很便捷的方法,即使用Q_PROPERTY,下面给出标准结构

Q_PROPERTY(数据类型 变量名 READ 变量名 WRITE set变量名 NOTIFY 变量名Changed FINAL)//FINAL 禁止子类覆盖此属性

这句语句也不用记,输入Q_PROPERTY是能够自动补全的,同时在输入变量名时qt也会同步帮你修改后续,只能说是相当的方便。

那里面的函数怎么实现呢?甚至也不需要自己实现,在语句末尾按下alt+enter,选择Generate Missing Q_PROPERTY Members,qt会自动补全没有写的成员和函数声明,并带上函数实现,也属于是一套龙服务了

这是我的代码补全后的样子:

//mediainfo.h...class MediaInfo : public QObject
{Q_OBJECT
public:......Q_PROPERTY(QString currenttitle READ currenttitle WRITE setCurrenttitle NOTIFY currenttitleChanged FINAL)QString currenttitle() const;void setCurrenttitle(const QString &newCurrenttitle);signals:void currenttitleChanged();private:QString m_currenttitle;
};...
//mediainfo.cpp.........void MediaInfo::getdata(const QString &file)
{......setCurrenttitle("最新标题");    //这是我在自己写的函数中进行赋值
}QString MediaInfo::currenttitle() const
{return m_currenttitle;
}void MediaInfo::setCurrenttitle(const QString &newCurrenttitle)
{if (m_currenttitle == newCurrenttitle)return;m_currenttitle = newCurrenttitle;emit currenttitleChanged();
}

而且这样我们就能够通过属性名在qml中直接访问和绑定

Button{...onClicked: {musicfile.open()}
}
FileDialog{id:musicfile...onAccepted: {mediasolve.getdata(selectedFile)console.log(mediasolve.currenttitle)    //打印 最新标题}
}
MediaInfo{id:mediasolve
}

当然,在极其便利的反面,就是代码可能比较冗长,可能会实现多余的函数,而且性能开销可能会较大。但是熟练运用Q_PROPERTY仍是让开发更加快速、便捷的实用方法~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919962.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919962.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919962.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu中网卡的 IP 及网关配置设置为永久生效

要将 Ubuntu 中 ens33 和 ens36 网卡的 IP 及网关配置设置为永久生效(重启后不丢失),需通过 netplan 配置并禁用 cloud-init 对网络的干扰(避免重启后配置被覆盖),具体步骤如下:一、最终的永久生…

不再让Windows更新!Edge游戏助手卸载及关闭自动更新

文章目录Windows系统更新问题方法一:通过注册表手动设置1. 打开注册表编辑器2. 定位到目标路径3. 创建新的DWORD值4. 修改数值方法二:命令行设置1. 打开命令提示符2. 输入命令验证设置是否生效恢复更新Edge关闭游戏助手Edge关闭后台运行Edge关闭自动更新…

css3之flex布局

flex布局要牢记的两个知识点: 开启了flex布局的元素叫flex containerflex container里面的直接子元素叫flex items 这两点要记牢,设置属性的时候才不会搞混这个是flex布局的整体图 一、flex container上的属性 1.flex-direction 修改主轴方向的属性&…

vscode 搭建C/C++开发环境搭建(linux)

1.编译器/调试器安装首先,需要安装编译器(GCC/G)和调试器(GDB),用于编译和调试代码。1.打开终端(Ctrl Alt T)2.更新软件包获取新版本信息sudo apt update3.安装build-essential包,它包含gcc,g等必要库sudo apt install…

vue-pure-admin页面引入和功能添加流程解析

vue-pure-admin (opens new window)是一款开源完全免费且开箱即用的中后台管理系统模版。完全采用 ECMAScript 模块(ESM)规范来编写和组织代码,使用了最新的 Vue3、Vite、Element-Plus、TypeScript、Pinia、Tailwindcss 等主流技术开发 以下是…

vlc-android: 编译自己的libvlc

概述 VLC 媒体播放器作为一款由志愿者开发团队精心维护的自由、开源且跨平台的多媒体播放器,能轻松驾驭绝大多数多媒体文件,无论是本地磁盘中的视频、音频,还是来自网络的流媒体协议. VLC for Android 支持网络串流,无论是基于 H…

并联谐振与串联谐振

在LC电路中,感抗和容抗相等时对应的频率值称为谐振频率,在接收广播电视信号或无线通信信号时,使接收电路的频率与所选择的发射的信号频率相同就叫做调谐。并联谐振LC并联谐振电路是指将电感器和电容器并联形成,如图所示。在并联谐…

打印机怎么连接电脑?打印机驱动?【图文详解】USB连接打印机?wifi连接打印机?

一、问题背景 在日常办公与生活里,把电脑和打印机连接起来,是实现文档、照片等打印的基础操作。但很多人初次尝试时,会因不熟悉流程而感到无从下手。 无论是办公场景下急需打印重要文件,还是日常生活中想要打印照片留念&#xff0…

CVPR 2025 | 医学影像加速进化:深度学习×多模态,精准诊断再升级

关注gongzhonghao【CVPR顶会精选】今天聊一个医学图像领域的前沿探索:结合空间感知卷积、扩散模型与视觉语言模型,从图像配准到合成分割,再到跨模态理解,打造了一个更加智能、鲁棒且可泛化的医学影像工具链。无论是SACB-Net带来的…

[每周一更]-(第157期):深入理解Go语言的垃圾回收机制:调优与监控

Go语言以其简洁的语法和强大的并发能力而闻名,而它的垃圾回收(GC)机制则是支撑其高性能的关键组件之一。本文将深入探讨Go语言的垃圾回收原理,并介绍如何对其进行调优与监控,以提升应用程序的性能。 Go语言垃圾回收机制…

Java 学习笔记(基础篇9)

1. 综合练习题目 1 :金额转换为中文大写格式请编写一个 Java 程序,实现将数字金额转换为中文大写格式(带单位)的功能,具体要求如下:(1) 程序接收用户输入的一个整数金额(范围:0-9999…

云原生俱乐部-k8s知识点归纳(5)

写到这里,k8s的内容已经到一半了,虽然后面的内容我觉得更加玄学一点。控制器真的是个神奇的东西,虽然后面的CRD会带着大家一起做一个控制器,但是还是觉得很奇妙。控制器大概就是k8s中的精华了,通过控制器去监听k8s中ap…

C++复习2

C继承 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。 继承呈现了面向对象程序设计…

ZKmall模块商城的跨境电商支付安全方案:加密与权限的双重防护

跨境电商支付环节面临双重挑战:一方面,不同国家的支付协议、货币结算规则差异显著,需满足多币种、多渠道的支付需求;另一方面,跨境数据传输的安全性与操作权限的严格管控直接关系到资金安全与合规性。ZKmall 模块商城针…

【数据结构】-5- 顺序表 (下)

一、集合框架 这是 Java 集合框架(Java Collections Framework)的核心继承关系树状图1. 最顶层:Iterable(接口)作用:所有 “可迭代” 的集合(如 List、Set、Queue)都必须实现它&…

最大连续1的个数Ⅲ-滑动窗口

1004. 最大连续1的个数 III - 力扣&#xff08;LeetCode&#xff09; Solution 标准滑动窗口。 class Solution { public:int longestOnes(vector<int>& nums, int k) {int nnums.size();int l0,z_cnt0,ans0;for(int r0;r<n;r){z_cnt1-nums[r];while(z_cnt>k…

实验二 Cisco IOS Site-to-Site Pre-share Key

一 实验设备 1、 CISCO 路由器 2 台 二 实验拓扑图 三 实验配置 1、 R1 路由器上连通性配置 R1(config)#interface e0/0 R1(config-if)#ip address 192.168.1.2 255.255.255.0 R1(config-if)#no shutdown R1(config)#interface e1/0 R1(config-if)#ip address 10.1.20.1 255.25…

深入理解 Rust Axum:两种依赖注入模式的实践与对比(二)

前言 我想把使用 Rust 开发Websocket 服务的文章写成一个系列&#xff0c;前面写了一遍如何使用 Axum 搭建一个Websocket 服务的文章&#xff0c;我们可以和前端demo页面进行全双工的 Websocket 消息传输&#xff0c;而且可以启用 HTTP2 的同时启用 TLS。 这时候问题来了&…

syn与quote的使用——结构体转create语句

前言 syn和quote的简单使用——生成结构体-CSDN博客https://blog.csdn.net/qq_63401240/article/details/150609865?spm1001.2014.3001.5501 前面使用syn和quote&#xff0c;发现挺好玩的&#xff0c;感觉可以干很多事情&#xff0c;不愧是Rust中的宏。 宏分为声明宏和过程…

集中式负载均衡 vs. 分布式负载均衡

集中式负载均衡 vs. 分布式负载均衡负载均衡&#xff08;Load Balancing&#xff09;是任何可伸缩系统的“交通警察”。 集中式负载均衡&#xff08;Centralized LB&#xff09;与分布式负载均衡&#xff08;Distributed LB&#xff09;代表了两种截然不同的“指挥哲学”&#…