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