将任何 QVariant 转换为 QString

5

1
只要是这些类型之一,您就可以使用toString()方法:http://doc.qt.io/qt-5/qvariant.html#toString。否则,您可以通过http://doc.qt.io/qt-5/qvariant.html#canConvert-1来推断类型是否可打印。 - DuKes0mE
2
你会用那个字符串做什么?它必须是人类可读的吗?如果是,那么如果 QVariant 包含了一个 QPixmap/QImage,你该如何将其转换为 QString - Mike
1
可能是重复的问题,参考如何在Qt中将QVariant转换为QString和反之? - Elcan
@FlorentUguet,你有没有看我的第一条评论? - manatttta
1
@manatttta 我试过了,但你所问的问题确实是一样的。即使您的 QVariant 是一个 int,它也会被输出为字符串。只有当您使用自定义类时,它才不起作用。 - Elcan
2个回答

16

您可以使用QVariant::toString来处理文档中列出的类型。

int value = 1;
QString s = QVariant(value).toString();

2
您可以使用QString格式化。
QVariant qv(1);
QString str = QString ("%1").arg(qv.toInt());

此外,它可以更加通用,如下所示:

也可以更加通用,如此:

if(qv.typeName() == QString("QString"))
   str = QString("%1").arg(qv.toString());
else if(qv.typeName() == QString("int"));
   str = QString ("%1").arg(qv.toInt());
...

或者通过使用qv.type()函数

if(qv.type() == QVariant::String)
    str = QString("%1").arg(qv.toString());
...

@manatttta 我认为你可以编写一个函数并迭代所有类型,这里提供一个示例。 - e.jahandar
@Falcon 我宁愿使用type()而不是typeName(),例如"if(qv.type() == QVariant::String)等。 - talamaki
1
@e.jahandar,永远不要使用“==”比较C字符串,如果需要比较,请使用“strcmp”,请参见此问题。在这种情况下,您可以像@talamaki建议的那样使用qv.type(),这样会更快且更直接。请编辑您的答案。 - Mike
1
@e.jahandar,QVariant::typeName() 返回一个 const char*,而您正在将其与字符串字面值 "QString""int" 进行比较。左侧和右侧的 operator== 都不是 QString - Mike
1
使用 QString::number(foo) 而不是 QString("%1").arg(foo) 会减少额外负担。然后,只需执行 str = qv.toString() 即可。最后,建议使用 QStringLiteral("xyz") 而非 QString("xyz"),可避免 C 字符串到 QString 的运行时转换。 - Kuba hasn't forgotten Monica
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接