我很难将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。现在我才意识到它已经很老了,可能再也不行了。如果是这样的话,最好的方法是什么?
答案 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') }}