1

我不知道如何在处理 QVariant 的 Qt 库中创建指向方法的函数指针。我的代码中有很多地方将 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;
}

将不胜感激提供讨论此问题的文档的链接或使用正确语法的方法。

4

1 回答 1

3

你不需要这样做。使用qvariant_castorQVariant::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;
}
于 2012-10-26T13:40:09.223 回答