【问题标题】:Set class member value by its name按名称设置类成员值
【发布时间】:2012-10-30 09:38:49
【问题描述】:

我有一个类,派生自QObject,它有一些成员。 我用param value 语法加载了一个配置文件。每个param 都是该类的成员,我想将其值设置为value

如果确实如此,那怎么可能?非常感谢!

PS 我本可以创建一个关联数组,但这不是我喜欢的方式。

【问题讨论】:

  • 你需要把成员变成Qt属性。
  • 如果我错了,请纠正我,但在编译时没有删除字段名称,使得这种反射不可能?

标签: c++ qt setvalue class-members


【解决方案1】:

您有两种方法:

  1. 使用Q_PROPERTY 宏将您的成员声明为属性。然后您可以使用QObject::setProperty(..) 按名称设置它。
  2. 声明一个带有属性名称的setter方法(例如,加上一个'set'前缀)和Q_INVOKABLE宏(或只是将其设为slot),然后使用QMetaObject::invokeMethod(..)按名称调用它。

【讨论】:

  • 我投了反对票,因为 TS 明确表示他不想使用关联数组,而您建议间接使用它
  • @cmannett85 非常感谢,我只是想知道,如何将QString 传递给setProperty()?我使用qPrintable()吗?
  • @aleguna 但是 OP 已经在使用 Qt 库,里面装满了它们。据我了解,OP 根本不想自己写。
  • @cmannett85 the OP simply did not want to write his/her own 就是这样!最后一个问题。当我想将此属性用作字符串时,我只需使用property("foo").toString(),对吗?
  • 我不知道你是怎么得出这个结论的。他从来没有说过要自己写
【解决方案2】:

这在 C++ 中是不可能的。唯一的方法是关联数组

【讨论】:

  • @cmannett85,它在内部使用某种关联数组。
  • 也许是这样,但我的 -1 是你的第一句话。
  • 我的第一句话是正确的。除非您直接间接使用关联数组,否则在 c++ 中无法做到这一点。
  • C++ 有许多关联数组作为其标准库的一部分,更不用说数百个第三方等价物了。所以在 C++ 中是可能的 - 正如你的第二句话所指出的那样。
  • 关联数组有多少实现并不重要。 TS 想在不使用它们的情况下按名称设置变量,这在 C++ 中是不可能的,句号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多