Преобразование QVariant не распознает std :: string, вызванную моим шаблоном - PullRequest
1 голос
/ 08 марта 2019

У меня есть функция в заголовке класса ("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 Ответ

1 голос
/ 08 марта 2019

Даже при регистрации на QVariant, QString не конвертируется свободно в QString.

Вместо этого вы можете добавить перегрузку:

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