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

时间:2016-04-29 14:10:01

标签: 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.addItem( "", QVariant::fromValue<std::vector<int>>( v[1] ) );
int pos = box.findData( QVariant::fromValue<std::vector<int>>(v[0]) );

pos-1,预计会0

手动搜索(ibox.count())是可行的并且有效。由于( box.itemData( 0 ).value< std::vector<int> >() == v[0] )令人惊讶地返回true!但findData也应该有效!

注意:添加Q_DECLARE_METATYPE( std::vector<int> );没有帮助

编辑2016/05/03:填写Qt错误:https://bugreports.qt.io/browse/QTBUG-53152

1 个答案:

答案 0 :(得分:3)

必须调用

QMetaType::registerComparators才能使用operator==代替按位比较。

致电(一次):QMetaType::registerComparators<std::vector<int>>();findData工作。