如何将int转换为QString?


Answers:


656

用途QString::number()

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

2
这是一个更有趣的问题:有没有更快的方法?我遇到了一个问题,即此版本之后几乎要花费比整个处理更多的时间……
Zeks

然后,您可能想处理预分配的缓冲区...但这听起来像是一个单独的问题。
Georg Fritzsche

122

而且,如果您想将其放入某些文本上下文中的字符串中,请忽略+运算符。只需做:

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

2
既然您提到了+运算符,请注意整数,因为它可能很好用,但是在内部,将operator+(const QString &s, char c)调用实现,并且字符串将不包含整数作为数字,但QChar::fromAscii(c)等效字符串
x29a

3
既然提到了+运算符,您实际上可以做到,但是可以理解发生了什么:QString p = s + QString :: number(1); 作为sa QString可以完美地工作。因此,基本上QString + QString可以,QString + int bad
大卫·桑切斯(

28

此外,要转换任何内容,可以使用QVariant。对于int一个QString你会得到:

QVariant(3).toString();

A float到a string或a string到a float

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

1
QVariant规则!
Mr.Coffee's

叫我疯了,但是我会更多地使用“如何将数字转换为QString?”这个问题,这是轻量级转换的主要答案,其他是特殊处理的答案。
mr3

17

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

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()and运算符<<很方便。

警告:您可能会想使用该sprintf()工具来模仿C样式printf()语句,但建议使用QTextStreamarg()因为它们支持Unicode string


14

我总是用QString::setNum()

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

setNum()在许多方面超载。请参阅QString课程参考。


12

以最简单的形式,使用格奥尔格·弗里茨切Georg Fritzsche)的答案

稍微先进一点,您可以使用它,

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

这里获取文档和示例。


不幸的是,指向诺基亚站点的链接不再起作用。
Eliyahu Skoczylas

3

仅出于完整性考虑,您可以使用标准库并执行 QString qstr = QString::fromStdString(std::to_string(42));


3

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.