QVariant::fromValue 是如何工作的?

Posted

技术标签:

【中文标题】QVariant::fromValue 是如何工作的?【英文标题】:How does QVariant::fromValue work? 【发布时间】:2017-01-19 18:31:07 【问题描述】:

我想知道 QVariant 的静态方法“fromValue”是如何工作的,这里是描述:

返回一个包含 value 副本的 QVariant。其他方面的行为与 setValue() 完全相同。

这个方法怎么可能有两种不同的行为,这取决于它是从实例调用的还是从它的静态版本调用的?因为不可能用另一个静态方法的相同原型创建一个非静态方法,而且我不知道你如何知道它是如何在方法本身内部调用的。

我对此很感兴趣,因为我试图为织物方法制作类似的东西。

【问题讨论】:

您对文本有误解。您引用的意思是“它的行为与 setValue 完全相同,只是它返回一个 QVariant ....”。 【参考方案1】:

QVariant::fromValue 定义如下:

template<typename T>
static inline QVariant fromValue(const T &value)
 return qVariantFromValue(value); 

qVariantFromValue 下方:

template <typename T>
inline QVariant qVariantFromValue(const T &t)
 return QVariant(qMetaTypeId<T>(), &t, QTypeInfo<T>::isPointer); 

这与setValue 在某些情况下内部使用的构造函数完全相同(有关详细信息,请参阅code)。

因此,我会说 cmets 中的 @Mat 几乎是正确的,您误解了文档。 你应该把它读成:

它的行为或多或少类似于setValue,但事实上它返回的是QVariant

查看完整的code了解更多详情。

【讨论】:

以上是关于QVariant::fromValue 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章

QVariant保存指针数据

QListWidgetItem设置获取指针型数据

QWidget对象设置获取指针型属性数据

从技术上讲,可变参数函数是如何工作的? printf 是如何工作的?

如何理解异常处理是如何工作的?

我是如何学习和工作的 - 番茄工作法