std :: string和QVariant之间的转换(反之亦然)Qt5

时间:2017-06-25 20:21:21

标签: c++ c++11 qt5 stdstring qvariant

我很难将std :: string转换为QVariant和QVariant回到std :: string。在这两种情况下,我最终得到空值(默认QVariant,就像它没有参数初始化)和空std :: string(“”)。

这些是我的代码的相关部分:

qRegisterMetaType<std::string>("std::string");

我发现了一个与此类似的问题,这就是它的工作方式。我还提到了另外提到的答案,所以在我的main.cpp中我有这个:

Q_DECLARE_METATYPE(std::string)

在我的testitemlistmodel.h中我有这个(在类声明之前):

{{1}}

我使用Qt5.8。

修改

我找到了此类转化的来源:http://www.qtcentre.org/threads/45922-best-way-to-extend-QVariant-to-support-std-string?p=208049#post208049。现在我才意识到它已经很老了,可能再也不行了。如果是这样的话,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

如何使用QString作为中位数类型?它有点开销但更容易维护代码:

/* std::string to QVariant */ {
    std::string source { "Hello, World!" };
    QVariant destination;        

    destination = QString::fromStdString(source);
    qDebug() << destination;
}

/* QVariant to std::string */ {
    QVariant source { "Hello, World!" };
    std::string destination;

    destination = source.toString().toStdString();
    qDebug() << destination.c_str();
}

QVariant QString constructor std::string可以QVariant构建,QString对象可以转换为std::string可以转换为QByteArray

另一种选择是使用QString代替std::string,而QString只会逐个复制// std::string to QVariant myQVariant.setValue<QByteArray>(myStdString.c_str()); // std::string to QVariant myStdString = myQVariant.value<QByteArray>().constData(); 字符,并且不会像<span class="help-block" v-show="form.errors.has('name')"> @{{ form.errors.get('name') }} </span> 那样将其转换为Unicode :

{{ form.errors.get('name') }}