QComboBox::findData 在 QVariant 存储 std::vector 时失败
QComboBox::findData fails when QVariant stores a std::vector
考虑这段代码:
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
。
手动搜索(i
到 box.count()
)可行且有效。由于( box.itemData( 0 ).value< std::vector<int> >() == v[0] )
出人意料returnstrue
!但是 findData
应该也可以!
注意:添加 Q_DECLARE_METATYPE( std::vector<int> );
没有帮助
编辑 2016/05/03:填补了一个 Qt 错误:https://bugreports.qt.io/browse/QTBUG-53152
必须调用 QMetaType::registerComparators 才能使用 operator==
而不是按位比较。
调用(一次):QMetaType::registerComparators<std::vector<int>>();
使 findData
工作。
考虑这段代码:
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
。
手动搜索(i
到 box.count()
)可行且有效。由于( box.itemData( 0 ).value< std::vector<int> >() == v[0] )
出人意料returnstrue
!但是 findData
应该也可以!
注意:添加 Q_DECLARE_METATYPE( std::vector<int> );
没有帮助
编辑 2016/05/03:填补了一个 Qt 错误:https://bugreports.qt.io/browse/QTBUG-53152
QMetaType::registerComparators 才能使用 operator==
而不是按位比较。
调用(一次):QMetaType::registerComparators<std::vector<int>>();
使 findData
工作。