Як перетворити Int на QString?


Відповіді:


656

Використання 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 :: число (1); будучи sa QString працює чудово. Отже, в основному QString + QString добре, QString + int погано .
Девід Санчес

28

Більше того, щоб перетворити все, що завгодно, ви можете використовувати QVariant. Для того , intщоб QStringви отримаєте:

QVariant(3).toString();

Від a floatдо stringa stringдо a 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() та оператор <<зручніше при форматуванні довших рядків із змішаними типами.

Застереження: Можливо, ви б спокусили використовувати sprintf()інструмент для імітації printf()висловлювань стилю C , але рекомендується використовувати QTextStreamабо arg()тому, що вони підтримують Unicode strings.


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 більше не працює.
Eliyahu Skoczylas

3

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


3

Якщо вам потрібне форматування номерів, відомого про локальне, замість цього використовуйте QLocale :: toString.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.