Как преобразовать int в QString?

Ответы:

658

Используйте QString::number():

int i = 42;
QString s = QString::number(i);
Георг Фрицше
источник
2
Вот более интересный вопрос: есть ли более быстрый путь? Я столкнулся с проблемой, когда эта версия почти занимает больше времени, чем вся последующая обработка ...
Zeks
Тогда вы, вероятно, захотите поработать над заранее выделенными буферами ... но это звучит как отдельный вопрос.
Георг Фрицше
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); Быть са QString работает отлично. Итак, в основном QString + QString - это нормально, QString + int - плохо .
Дэвид Санчес
28

Более того, чтобы конвертировать все, что вы хотите, вы можете использовать QVariant. Для того , intчтобы QStringвы получите:

QVariant(3).toString();

А floatк а stringили а stringк float:

QVariant(3.2).toString();
QVariant("5.2").toFloat();
Габриэль де Гримуар
источник
1
QVariantрулез!
Mr.Coffee
Назовите меня сумасшедшим, но я бы больше использовал вопрос «Как преобразовать число в 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).

Поскольку оператор <<()был перегружен, вы можете использовать его для нескольких типов, а не только int. QString::arg()перегружен, напримерarg(int a1, int a2) , но нет arg(int a1, QString a2), поэтому использование QTextStream()оператора and <<удобно при форматировании длинных строк со смешанными типами.

Предостережение: у вас может возникнуть соблазн использовать sprintf()средство для имитации printf()операторов в стиле C , но это рекомендуется использовать QTextStreamили arg()потому, что они поддерживают Unicode string.

Мэтью Краус
источник
14

Я всегда использую QString::setNum().

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

setNum()перегружен во многих отношениях. Смотрите QStringссылку на класс.

Нарек
источник
12

В простейшей форме воспользуйтесь ответом Георга Фрицше

Для немного продвинутых, вы можете использовать это,

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

Получить документацию и пример здесь ..

liaK
источник
К сожалению, ссылка на сайт Nokia больше не работает.
Элиягу Скочилас
3

Просто для полноты вы можете использовать стандартную библиотеку и сделать QString qstr = QString::fromStdString(std::to_string(42));

Морган
источник
3

Если вам нужно форматирование чисел с учетом локали, используйте взамен QLocale :: toString.

Андре
источник