QVariant与std :: shared_ptr

时间:2014-03-05 14:38:09

标签: c++ qt

我有以下问题,我正在使用

Q_DECLARE_METATYPE( std::shared_ptr<int> );
qRegisterMetaType< std::shared_ptr<int> >();
QMetaType::registerComparators< std::shared_ptr<int> >();

使用例如std::shared_ptr<int> QListModel。 我需要一个行为

QVariant::fromValue( std::shared_ptr<int>( new int(5) ) ) == QVariant::fromValue( std::shared_ptr<int>( new int(5) ) )

是真的。上面的代码在这里返回false,因为std::shared_ptr<int>::operator== ()比较了原始指针。是否可以在QMetaType::registerComparators

中注册除标准运算符以外的比较器

1 个答案:

答案 0 :(得分:5)

您可以尝试使用registerConverter()允许将shared_ptr<int>隐式转换为常规int,并以这种方式进行比较。显然,你不会registerComparator()。另一种方法是将shared_ptr<int>包装在您自己的类中,并按照您希望的方式进行比较。

或查看Q_DECLARE_SMART_POINTER_METATYPE