Q_PROPERTY:成员与读/写

2024-03-19

我正在阅读 Qt 5.5 关于 Q_PROPERTY 宏的文档,但我不能很好地理解它。

据我所知,您可以在此宏中使用关键字 MEMBER 或访问器 READ/WRITE 来代替。如果您使用关键字 MEMBER,则不必编写访问器,因为您可以使用 setProperty() 和 Property() 来访问您的私有数据成员(属性),就像 set 和 get 一样。

重点是:使用MEMBER和使用READ/WRITE有什么区别吗? 什么时候应该使用一种方式,什么时候应该使用另一种方式?

如果有必要的话:

使用 MEMBER 的示例:

Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)

使用读/写的示例:

Q_PROPERTY(int propX READ getX WRITE setX)

通过仔细阅读文档 http://doc.qt.io/qt-5/properties.html,在我看来,存在细微的、重要的差异。

首先:

如果未指定 READ 访问器函数,则需要 MEMBER 变量关联。这使得给定的成员变量可读可写,而无需创建 READ 和 WRITE 访问器函数。

这意味着您可以使用MEMBER并依赖自动生成的、简单的访问器函数,或者如果这些函数恰好比默认函数更复杂,则为自己定义这些函数。

换句话说,如果您的访问器功能完全相同,例如:

int propName() const { return prop; }

Thus, MEMBER很好。如果您有类似的情况,则不会:

int propName() const { return superComplexMathUsedToComputeProp(); }

另请注意:

READ、WRITE 和 RESET 功能可以继承。它们也可以是虚拟的。

如果您正在处理层次结构,也许您希望它们被继承,所以也许可以选择READ and WRITE会更好。

哪个是最好的以及使用什么取决于具体问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Q_PROPERTY:成员与读/写 的相关文章

  • Visual Studios 2015 中的“恢复 NuGet 包”没有执行任何操作

    我将解决方案从 SVN 拉入 Visual Studios 2015 代码中的一些 使用 引用出现错误 因此我尝试在右键单击 解决方案 中的解决方案时运行 恢复 NuGet 包 选项探索者 这没有任何作用 我必须手动进入 nuget 管理器
  • 无法使用c#更改视频捕获分辨率

    我正在尝试使用 C 中的 DirectShowNet 更改默认网络摄像头分辨率 据我所知 我需要通过调用 windows win32 api dll 中内置的 VideoInfoHeader 类来更改它以进行 avi 捕获 我有来自 Dir
  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • 对 ExecuteNonQuery() 的单次调用是原子的

    对 ExecuteNonQuery 的单次调用是否是原子的 或者如果单个 DbCommand 中有多个 sql 语句 那么使用事务是否有意义 请参阅我的示例以进行说明 using var ts new TransactionScope us
  • 如何通过 libwebsocket 发送异步数据?

    我正在将 Warmcat 的 libwebsocket C 库用于小型 Websocket 服务器 我已经启动并运行了这些示例 并且可以发送数据以响应从 websocket 接收数据 例如回显发送的反向字节 但是 我无法弄清楚如何在不使用
  • C++ 指针和对象实例化

    这有效 MyObject o o new MyObject 而这并不 MyObject o new MyObject Why 关键词new 返回一个指针 http msdn microsoft com en us library kewsb
  • 预编译头和 Visual Studio

    有没有办法设置 Visual Studio 解决方案参数 以便它只创建预编译头而不构建整个解决方案 具体来说 它是一个巨大的 C 解决方案 本身有许多项目 谢谢 仅选择 pch 创建者源文件 通常是 stdafx cpp 然后编译该文件 C
  • 无法将参数从 `const char *` 转换为 `char *`

    鉴于此代码 void group build int size std string ips Build the LL after receiving the member list from bootstrap head new memb
  • 从内存流播放视频文件

    只是好奇看看这是否可能 我有一个 Windows 应用程序 它从我的电脑上的 avi 文件读取所有字节 然后将其存储在 byte 中 现在我的内存中有 avi 文件 我想直接从内存将其加载到某种视频播放器控件中 我尝试过使用 wmplaye
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • C# 中的抽象类和接口类有什么不同?

    C 中的抽象类和接口类有什么不同 An 接口不是类 它只是一个contract定义了public一个类的成员must实施 抽象类只是一个类 您从中可以cannot创建一个实例 通常您会使用它来定义一个基类 该基类定义了一些virtual方法
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 本地时间的内存需要释放吗?

    void log time t current time 0 tm ptm localtime current stuf 只是想确定 我是否需要在方法结束时释放 tm 指针分配的内存 不 你不应该释放它 该结构是静态分配的 检查文档 htt
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 从具有相同属性的另一个对象创建对象

    我有一个 C 对象 可以说有 20 个属性 它是数据契约的一部分 我还有另一个具有类似属性的业务实体 我想从响应对象中填充该实体 除了将一个对象的每个属性分配给另一个对象的相应属性之外 还有其他方法可以做到这一点吗 是的 看看自动映射器 h
  • 意外的 const 引用行为

    include
  • 如何重用具有稍微不同的 ProcessStartInfo 实例的 Process 实例?

    我有以下开始的代码robocopy https technet microsoft com en us library cc733145 aspx as a Process 我还需要进行数据库查询以确定每次需要复制哪些目录robocopy被
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段

随机推荐

  • 作为函数输入传递的 python 字典在该函数中的作用类似于全局函数,而不是局部函数

    我对下面的行为感到非常困惑 情况 1 3 和 4 的表现符合我的预期 但情况 2 却没有 为什么情况 2 允许函数全局更改字典条目的值 即使函数从未返回字典 我使用函数的一个主要原因是将函数中的所有内容与代码的其余部分隔离 但如果我选择在函
  • VBA Excel Outlook 电子邮件正文格式

    我有自动发送电子邮件的 useform 我想更改电子邮件的正文 其中一些将基于带有文本的单元格 因此它可以是动态的 有些将在代码中修复 现在 在运行我需要对象的错误 我将感谢您的帮助 我希望电子邮件正文中的每一行都是分开的 Sub send
  • Erlang编译器错误

    我有以下代码 loop Data gt receive Key Value gt Key Value Data Key gt member Key Data 14 loop Data stop gt io format server sto
  • 在 Snow Leopard 上安装 Mac OS X SDK 10.5

    有没有一种简单的方法可以在 Snow Leopard 上安装 下载 Mac OS X 10 5 SDK 我通过 Mac App Store 安装了 Xcode 4 0 如果需要的话我也可以从开发者网站下载它 但我不知道它是否包含10 5 S
  • 如何定义C结构:c-linkage和udt

    我有用 C ABI 接口用 X 语言编写的 dll 我想在我的 C 程序中使用这个 C ABI 我在main cpp中写道 extern C struct Foo const char const data unsigned len str
  • 如何在 Jenkins WEB GUI 中显示生成的 trx 文件?

    我有一堆测试结果文件 trx 在目录中构建完成后TestResults 是否可以在 Jenkins 中显示这些测试结果 如何 我尝试了 MSTest Jenkins 插件 但它只允许一个trx每个作业的文件 trx文件在每次构建后生成 并以
  • 初始化 log4j 文件时出现异常

    当尝试从配置文件初始化 hibernate 时 我得到 NullPointerException 根本原因如图所示 Caused by org apache commons logging LogConfigurationException
  • 为什么Tomcat需要安装JDK? [复制]

    这个问题在这里已经有答案了 据我所知 JRE是运行时 JDK是用于Java代码的开发 但在生产中的 Tomcat 服务器上 将无法开发 Java 应用程序 所以 我的问题是为什么我们不能只安装 JRE 来运行 Tomcat 为什么运行 To
  • Ruby on Rails 3 中的类方法 — 我完全迷失了!

    背景here http www railway at 2010 03 09 named scopes are dead 在上面的链接中 给出了以下示例 class lt lt self def by author author where
  • 为什么 OpenJDK 将私有方法放入 vtable 中?

    看起来开放JDK 8 http hg openjdk java net jdk8 jdk8 hotspot file 87ee5ee27509 src share vm oops klassVtable cpp l575放置非私有方法fin
  • 如何在 Delphi 7 中的文件中保存 UTF-16(Little Endian)和字符串值?

    我想将编辑框中的值和 UTF 16 Little Endian 值保存在文件中 我将举一个简单的例子来更好地理解我的问题 Edit Box Value gt Good Hex value FFFEFF15410042004300 which
  • 如何将环境变量添加到 Azure Devops 管道中

    我正在为 Node 应用程序设置 Azure 管道 并使用 Jest 来测试 API 和集成 源代码位于 Azure DevOps 上 代码部署在 Azure 门户中 当我运行测试时 它在管道中失败 因为 env 从未在远程存储库中检查 环
  • 在 C++ 中将 HTTP 响应正文与标头分离

    我目前正在为某个项目编写自己的 C HTTP 类 我正在尝试找到一种方法将响应正文与标头分开 因为这是我需要返回的唯一部分 如果您不熟悉 这里是原始 http 标头的示例 HTTP 1 1 200 OK Server nginx 0 7 6
  • 如何对不同形状使用同一组修改器

    作为我学习 SwiftUI 项目的一部分 我做了一些形状旋转 下面有代码 我想知道如何避免每个形状使用相同的三行修饰符 func getShape shape Int i Int gt AnyView switch shape case 0
  • 为什么当我“使用”BinaryReader 对象时我的 FileStream 对象被释放?

    考虑以下函数 private int GetSomethingFromFile FileStream fs using BinaryReader br new BinaryReader fs fs Seek 0 SeekOrigin Beg
  • 线程和多处理模块之间有什么区别?

    我正在学习如何使用threading和multiprocessingPython 中的模块可并行运行某些操作并加速我的代码 我发现这很难 也许是因为我没有任何理论背景 来理解threading Thread 对象和一个multiproces
  • 如何检查可见 DOM 中是否存在元素?

    如何在不使用getElementById method 我已经设置了一个现场演示 http jsbin com apawi5 3以供参考 我还将在这里打印代码
  • 如何在 python 中实现“#ifdef”?

    编程于C我曾经有代码部分仅用于调试目的 记录命令等 通过使用这些语句可以完全禁用生产 ifdef预处理器指令 如下所示 ifdef MACRO controlled text endif MACRO 做类似事情的最好方法是什么python
  • 神经网络立即过拟合

    我有一个带有 2 个隐藏层的 FFNN 用于几乎立即过拟合的回归任务 epoch 2 5 取决于 个隐藏单元 ReLU Adam MSE 每层相同的隐藏单元数 tf keras 32 个神经元 128 个神经元 我将调整隐藏单元的数量 但为
  • Q_PROPERTY:成员与读/写

    我正在阅读 Qt 5 5 关于 Q PROPERTY 宏的文档 但我不能很好地理解它 据我所知 您可以在此宏中使用关键字 MEMBER 或访问器 READ WRITE 来代替 如果您使用关键字 MEMBER 则不必编写访问器 因为您可以使用