如何将int转换为QString?

444

有没有一个 QString 函数可以将 int 转化为 QString 输出?

9个回答

804

3
更有趣的问题是:是否有更快的方法?我遇到了一个问题,这个版本几乎比后续的整个处理过程都要花费更多时间…… - Zeks
1
那么您可能想要在预分配的缓冲区上工作...但这听起来像是一个单独的问题。 - Georg Fritzsche

134

如果您想将其放入某些文本环境中的字符串中,忘记 +运算符。 只需执行:

// 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);

3
由于您提到了+运算符,请注意整数,因为它可能会工作,但在内部,会调用operator+(const QString &s,char c)实现,并且字符串将不包含整数作为数字,而是其等价的QChar::fromAscii (c) - x29a
4
既然你提到了加号运算符,那么你实际上是可以使用它的,但要理解发生了什么:当将一个QString类型的变量s和一个整数1相加时,可以使用QString::number(1)将整数转换为字符串类型,然后再进行串接。所以,基本上QString + QString是可以的,但是QString + int是不行的。 - David Sánchez

36
此外,您可以使用QVariant来转换您想要的任何内容。将int转换为QString,您会得到:
QVariant(3).toString();

float 转换为 string 或将 string 转换为 float

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

2
称呼我为疯子,但我更喜欢将问题表述为“如何将数字转换为QString?”作为轻量级转换的主要答案,并将其他答案用于特殊处理。 - mr3

20

另一个选项是使用QTextStream<<运算符的方法与您在C ++中使用cout相同:

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

// OUTPUT:
// Mouse click: (5, 1).

由于运算符<<()已经被重载,因此您可以将其用于多种类型,而不仅仅是intQString::arg()被重载,例如arg(int a1, int a2),但没有arg(int a1, QString a2),因此在格式化具有混合类型的较长字符串时使用QTextStream()和运算符<<非常方便。

注意: 您可能会 VersVers 使用sprintf()来模仿C风格的printf()语句,但建议使用QTextStreamarg(),因为它们支持Unicode strings。


17

我通常使用QString::setNum()

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

setNum() 在许多方面被重载。请参阅QString类的参考文献。


13

除了 Georg Fritzsche 的回答,还有一种更高级的方法:

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

获取文档和示例,请点击这里


5
如果您需要区域感知的数字格式化,请使用 QLocale::toString

3

为了完整起见,您可以使用标准库并执行以下操作:

QString qstr = QString::fromStdString(std::to_string(42));

3

QLocale有一种方便的数字转换方法。虽然比接受的答案多打了一些字,但对于浮点数来说更加有用。因此我喜欢用这种方式来完成转换。下面是一个整数的示例:

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

这里是关于浮点数的:

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

最后一个参数是小数位数。您还可以插入一个字符格式参数,例如第二个参数中的“f”或“e”。其优点是,如果您的程序在使用逗号作为小数“点”的区域中运行,则会自动以该方式打印。它不包括在像<QCoreApplication>这样的东西中,因此您当然需要在某个地方进行#include <QLocale>。它真正发挥作用的是在格式化货币字符串方面。
它有轻微的性能缺陷,需要在评估过程中创建和删除对象,但如果性能是一个问题,您可以只分配一次并重复使用它。
您可以编写:
QString s = QString::number(42.5, 'f', 1);

但是根据帮助文档所述,“与QLocale::toString()不同,此函数不遵循用户的语言环境设置。”


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