Как преобразовать 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

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


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

3

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


3

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.