QVariant转换无法识别我的模板调用的std :: string

时间:2019-03-08 05:42:33

标签: c++ qt templates qvariant

我在类头(“ frame.h”)中有一个函数,该函数应该将QString转换为通用类型,如果QString为空,则将其初始化为默认值,如下所示。

template <typename T>
static void setStat(T &val, QString &temp)
{
    QVariant qv(temp);
    if (temp == "")
        val = T();
    else
        val = qv.value<T>();
}

当我调用它(它是我唯一的QVariant实例)时,出现以下两个错误:

Type is not registered, please use the Q_DECLARE_METATYPE macro to make it 
known to Qt's meta-object system (compiling source file item.cpp)

'qt_metatype_id': is not a member of 'QMetaTypeId<T>'

在第一个错误(“ item.cpp”)中提到的文件中,我一次调用setStat()一次,在下面的代码中,该代码在类构造函数中。

string temp1 = "";
Frame::setStat(temp1, vec[5]);
desc = temp1;

值得一提的是,这是在VS2017中带有Qt扩展名的。据我了解,错误告诉我std :: string是无法识别的类型。这是正常行为吗?我该如何解决?

1 个答案:

答案 0 :(得分:1)

即使注册了QVariantQString也无法自由转换为QString

您可以改为添加过载:

static void setStat(std::string &val, QString &temp)
{
    val = temp.toStdString();
}