【问题标题】:Convert any QVariant to QString将任何 QVariant 转换为 QString
【发布时间】:2016-12-15 10:57:17
【问题描述】:

我知道如何将包含QStringQVariant 转换为QStringHow can I convert QVariant to QString and vice versa in Qt?

我想问的是如何将 ANY QVariant 转换为 QString?即即使我的QVariant 对象有一个int,有没有一种简单的方法可以将其转换为QString

【问题讨论】:

  • 你可以使用 toString() 方法,只要它是这些类型之一:doc.qt.io/qt-5/qvariant.html#toString 否则,你可以推断该类型是否可以通过doc.qt.io/qt-5/qvariant.html#canConvert-1打印出来
  • 你会用这个字符串做什么?它必须是人类可读的吗?如果是这样,如果QVariant 包含QPixmap/QImage 怎么办?您将如何从中制作QString
  • @FlorentUguet 你读过我的第一条声明吗?
  • @manatttta 我做了,但你问的完全一样。即使您的 QVariant 是一个 int,它也会作为字符串输出。仅当您使用自定义类时,它才会起作用。

标签: c++ qt


【解决方案1】:

您可以将QVariant::toString 用于方法documentation 中列出的类型。

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());
    ...
    

    【讨论】:

    • 感谢您的回复。但是,这是特定于 int 类型的。我的意思是所有类型!
    • @manatttta 我认为您可以编写一个函数并针对所有类型进行迭代,添加了一个示例。
    • @e.jahandar ,永远不要使用==比较c字符串,如果你想使用strcmp,请参阅this question。在这种情况下,您可以按照@talamaki 的建议使用qv.type(),这样会更快,更重要。请编辑您的答案
    • @e.jahandar , QVariant::typeName() 返回一个 const char* 并且您将它与您的字符串文字 "QString""int" 进行比较。 operator== 的 LHS 和 RHS 都不是 QString
    • 使用QString::number(foo) 而不是QString("%1").arg(foo) 会减少开销。只需执行str = qv.toString()。最后,而不是 QString("xyz") 更喜欢 QStringLiteral("xyz") - 它节省了从 C 字符串到 QString 的运行时转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多