我不知道如何在Qt库中创建一个处理QVariant的方法的函数指针。我在我的代码中有很多地方可以将QVariantList转换为QList,其中SomeType可以是QString,int,QMap或其他可以保存在QVariant对象中的变量。在我将要使用该方法时,类型是已知的。
我可以使用模板编写方法吗?下面是我想写的方法的伪代码
template <class T>
QList<T> QVariantListToQList(QVariantList qvList, (* QVariant::toXXX()) convert)
{
QList<T> qlistOfMembers;
foreach(T listMember, qvList)
{
qlist.OfMember.append(listMmeber.convert());
}
return qlistOfMembers;
}
可以使用指向文档的链接或使用正确语法的方法。
答案 0 :(得分:3)
你不需要这样做。使用qvariant_cast
或QVariant::value
函数,完全删除该参数。
类似的东西:
template <class T>
QList<T> QVariantListToQList(QVariantList const& qvList)
{
QList<T> qlistOfMembers;
foreach(QVariant const& listMember, qvList)
{
qlistOfMembers.append(listMember.value<T>());
}
return qlistOfMembers;
}
如果你想按自己的方式去做,语法会有点棘手:
#include <QtCore>
template <class T>
QList<T> QVariantListToQList(QVariantList const& qvList,
T (QVariant::*convert)() const)
{
QList<T> qlistOfMembers;
foreach(QVariant const& listMember, qvList)
{
qlistOfMembers.append((listMember.*convert)());
}
return qlistOfMembers;
}
int main(void)
{
QVariantList vl;
vl.append(QVariant(QString("hello")));
qDebug() << vl;
QList<QString> sl = QVariantListToQList<QString>(vl, &QVariant::toString);
qDebug() << sl;
}