【问题标题】:How to convert int to QString?如何将 int 转换为 QString?
【发布时间】:2011-03-13 19:27:20
【问题描述】:

是否有一个 QString 函数接受 int 并将其输出为 QString

【问题讨论】:

    标签: c++ qt type-conversion


    【解决方案1】:

    QLocale 有一种方便的数字转换方法。它的打字量并不比公认的答案多多少,但在浮点数的情况下更有用;所以我喜欢这样做。这是一个int:

    int i = 42;
    QString s = QLocale::toString(i);
    

    这是一个浮动:

    float f=42.5;
    QString s = QLocale::toString(f, 1);
    

    最后一个参数是小数位数。您还可以为第二个参数插入 char 格式参数,例如“f”或“e”。这样做的好处是,如果您的程序在使用逗号作为小数“点”的语言环境中运行,它将自动以这种方式打印。它不包含在<QCoreApplication> 之类的东西中,所以你当然必须在某个地方做一个#include <QLocale>。它在打印货币字符串方面真正发挥了作用。

    可以写:

    QString s = QString::number(42.5, 'f', 1);
    

    但根据帮助“与 QLocale::toString() 不同,此函数不遵守用户的区域设置。”

    【讨论】:

      【解决方案2】:

      如果您需要支持区域设置的数字格式,请改用 QLocale::toString。

      【讨论】:

        【解决方案3】:

        此外,要转换任何你想要的,你可以使用QVariant。 对于 intQString,您会得到:

        QVariant(3).toString();
        

        floatstringstringfloat

        QVariant(3.2).toString();
        QVariant("5.2").toFloat();
        

        【讨论】:

        • 叫我疯子,但我会从“如何将数字转换为 QString?”这个问题中得到更多的用处,这是轻量级转换的主要答案,以及特殊的其他答案治疗。
        【解决方案4】:

        以最简单的形式,使用 Georg Fritzsche

        的答案

        有点高级的可以用这个,

        QString QString::arg ( int a, int fieldWidth = 0, int base = 10, const QChar & fillChar = QLatin1Char( ' ' ) ) const
        

        获取文档和示例here..

        【讨论】:

        • 很遗憾,诺基亚网站的链接不再有效。
        【解决方案5】:

        我总是使用QString::setNum()

        int i = 10;
        double d = 10.75;
        QString str;
        str.setNum(i);
        str.setNum(d);
        

        setNum() 在很多方面都超载了。请参阅QString 类参考。

        【讨论】:

          【解决方案6】:

          另一种选择是使用 QTextStream<< 运算符,其方式与在 C++ 中使用 cout 的方式大致相同:

          QPoint point(5,1);
          QString str;
          QTextStream(&str) << "Mouse click: (" << point.x() << ", " << point.y() << ").";
          
          // OUTPUT:
          // Mouse click: (5, 1).
          

          因为操作符&lt;&lt;()已经被重载,你可以将它用于多种类型,而不仅仅是intQString::arg()被重载了,比如arg(int a1, int a2),但是没有arg(int a1, QString a2),所以使用QTextStream()和操作符&lt;&lt;在格式化较长的字符串和混合类型时比较方便。

          警告:您可能很想使用sprintf() 工具来模仿C 风格的printf() 语句,但建议使用QTextStreamarg(),因为它们支持Unicode @ 987654336@s.

          【讨论】:

            【解决方案7】:

            为了完整起见,您可以使用标准库并执行QString qstr = QString::fromStdString(std::to_string(42));

            【讨论】:

              【解决方案8】:

              如果你想把它放到一些文本上下文中的字符串中,忘记+ 操作符。 只需这样做:

              // Qt 5 + C++11
              auto i = 13;    
              auto printable = QStringLiteral("My magic number is %1. That's all!").arg(i);
              
              // Qt 5
              int i = 13;    
              QString printable = QStringLiteral("My magic number is %1. That's all!").arg(i);
              
              // Qt 4
              int i = 13;    
              QString printable = QString::fromLatin1("My magic number is %1. That's all!").arg(i);
              

              【讨论】:

              • 既然您提到了+ 运算符,请注意整数,因为它可能工作得很好,但在内部,调用了operator+(const QString &amp;s, char c) 实现,并且字符串不会包含整数作为数字,但它的@ 987654325@等价
              • 既然你提到了 + 运算符,你实际上可以这样做,但要了解发生了什么:QString p = s + QString::number(1);作为一个 QString 完美地工作。所以,基本上 QString + QString 是可以的,QString + int bad.
              【解决方案9】:

              使用QString::number():

              int i = 42;
              QString s = QString::number(i);
              

              【讨论】:

              • 这里有一个更有趣的问题:有没有更快的方法?我遇到了一个问题,这个版本几乎比之后的整个处理花费更多的时间......
              • 那么您可能想要处理预分配的缓冲区...但这听起来像是一个单独的问题。
              猜你喜欢
              • 2013-05-14
              • 1970-01-01
              • 2012-12-19
              • 1970-01-01
              • 1970-01-01
              • 2015-01-17
              • 2021-11-17
              • 2020-04-20
              • 2012-11-04
              相关资源
              最近更新 更多