我该如何转换Qt的QVariant来 boost::: any?

最佳答案

我不认为有一种简单的方法,我会执行以下操作:

boost::any qvariant_to_any(const QVariant& v) {
    switch(v.userType()) {
        case QVariant::Bool:
            return boost::any(v.value<bool>());
            //or: return boost::any(v.toBool());
        case QVariant::Int:
            return boost::any(v.value<int>());
            //or: return boost::any(v.toInt());
        case QVariant::UInt:
            return boost::any(v.value<unsigned>());
        // ...
        // all your types which store in a QVariant in your use case
        case QVariant::Invalid:
        default:
            throw std::bad_cast(); //or return default constructed boost::any
    }
}

如果Boost.Variant可以代替Boost.Any来完成这项工作,那么在德国杂志上有一篇很好的文章介绍了如何将QVariant转换为Boost.Variant,反之亦然。

德语文章:http://www.heise.de/developer/artikel/Konvertierungen-992950.html
来源:ftp://ftp.heise.de/pub/ix/developer/elfenbein.zip

09-04 16:08