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:看我文章的最后一个注释,已经试过了。我的回答完全错了<默认情况下,使用