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



我在类标题(" 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;

可能值得一提的是,这是在QT扩展程序的VS2017中。据我了解,错误告诉我STD :: String是一种未识别的类型。这是正常的行为吗?我该如何解决?

即使使用QVariant注册,QString也不会自由转换为QString

您可能会添加过载:

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

相关内容

  • 没有找到相关文章

最新更新