Qt 当QVariant存储std::vector时,QComboBox::findData失败

Qt 当QVariant存储std::vector时,QComboBox::findData失败,qt,stdvector,qvariant,Qt,Stdvector,Qvariant,考虑以下代码: std::vector< std::vector<int> > v; v.push_back( std::vector<int>( 1, 4 ) ); v.push_back( std::vector<int>( 1, 3 ) ); QComboBox box; box.addItem( "", QVariant::fromValue<std::vector<int>>( v[0] ) ); box.addI

考虑以下代码:

std::vector< std::vector<int> > v;
v.push_back( std::vector<int>( 1, 4 ) );
v.push_back( std::vector<int>( 1, 3 ) );
QComboBox box;
box.addItem( "", QVariant::fromValue<std::vector<int>>( v[0] ) );
box.addItem( "", QVariant::fromValue<std::vector<int>>( v[1] ) );
int pos = box.findData( QVariant::fromValue<std::vector<int>>(v[0]) );
std::vectorv;
v、 推回(std::vector(1,4));
v、 推回(std::vector(1,3));
QComboBox;
box.addItem(“,QVariant::fromValue(v[0]);
box.addItem(“,QVariant::fromValue(v[1]);
int pos=box.findData(QVariant::fromValue(v[0]);
pos
-1
,而预期为
0

手动搜索(将
i
搜索到
box.count()
)是可行的,并且有效。As
(box.itemData(0).value()==v[0])
意外返回
true
!但是
findData
也应该有效

注:添加
Q_DECLARE_元类型(std::vector)没有帮助

编辑2016/05/03:填充了一个Qt错误:必须调用才能使用
运算符==
而不是按位比较

调用(一次):
QMetaType::registerComparators()
使
findData
工作。

必须被调用才能使用
运算符==
而不是按位比较


调用(一次):
QMetaType::registerComparators()
使
findData
工作。

您是否尝试过使用
a
以外的类型,例如
int
?这将隔离问题是否与
A
std::vector
@JonHarper:Good point有关。
int*
也有同样的问题,所以问题显然来自于
std::vector
也许可以试试
Q\u DECLARE\u元类型(std::vector)
?@JonHarper:看我文章的最后一个注释,已经试过了。我的回答完全错了<默认情况下,code>std::vector
是用声明的。您是否尝试过使用
a
以外的类型,例如
int
?这将隔离问题是否与
A
std::vector
@JonHarper:Good point有关。
int*
也有同样的问题,所以问题显然来自于
std::vector
也许可以试试
Q\u DECLARE\u元类型(std::vector)
?@JonHarper:看我文章的最后一个注释,已经试过了。我的回答完全错了<默认情况下,使用