我有一个代表数据库行的QMap
。这些项目按列名索引:
QMap<QString, QVariant> mapOfItems_;
然后我有一个按列名称检索项目的方法:
QVariant ImportDataSourceRow::byName( const QString& name )
{
if(mapOfItems_.contains(name))
return mapOfItems_.value(name);
else
throw NoSuchColumn();
}
我还想实现方法来逐列索引(0
为第一列):
QVariant ImportDataSourceRow::byIndex( size_t index )
{
// Now what?
}
如何从地图获取偏移量index
的值? QMap
是否保证按照我的要求订购?
答案 0 :(得分:1)
QMap的条目保证按键排序,在您的情况下,QString :: operator&lt;。
要获取地图内的位置,您可以使用:
FINDID SUPPLIERID SUPPLIERSKU PRICE FROM_DATE NEW_TO_DATE IDENTIFY
1000001 1001 012RE0020 4.0000 2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000001 1001 012RE0020 4.0000 2016-05-12 07:16:24.000 2016-05-12 07:52:54.000 0
1000001 1001 012RE0020 5.0000 2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1
1000002 1001 101ME0320 21.0000 2016-05-12 06:49:40.000 2016-05-12 07:16:23.000 0
1000002 1001 101ME0320 21.0000 2016-05-12 07:16:24.000 2016-05-12 07:33:37.000 0
1000002 1001 101ME0320 26.0000 2016-05-12 07:33:38.000 2016-05-12 07:52:54.000 0
1000002 1001 101ME0320 27.0000 2016-05-12 07:52:55.000 9999-12-31 00:00:00.000 1
请注意,如果使用constFind()并且返回的迭代器等于mapOfItems.constEnd()而不是执行两次查找(contains和value()),则byName()方法会更有效。
答案 1 :(得分:0)
不推荐,但您可以尝试这样做:
QList<QString> list = mapOfItems_.values();
if(index>=0 && index<list.count()) return list.at(index);
return QString();
不知道它如何与QVariant一起使用。