Jak przekonwertować int na QString?

Odpowiedzi:

656

Użyj QString::number():

int i = 42;
QString s = QString::number(i);
Georg Fritzsche
źródło
2
Oto bardziej interesujące pytanie: czy istnieje szybszy sposób? Napotkałem problem polegający na tym, że ta wersja prawie zajmuje więcej czasu niż całe przetwarzanie później ...
Zeks
Wtedy prawdopodobnie chcesz pracować nad wstępnie przydzielonymi buforami ... ale to brzmi jak osobne pytanie.
Georg Fritzsche,
122

A jeśli chcesz umieścić go w ciągu w kontekście tekstowym, zapomnij o +operatorze. Po prostu wykonaj:

// 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);
Kamil Klimek
źródło
2
Ponieważ wspominasz o +operatorze, uważaj na liczby całkowite, ponieważ może on bardzo dobrze działać, ale wewnętrznie, operator+(const QString &s, char c)implementacja jest wywoływana, a ciąg nie będzie zawierał liczby całkowitej jako liczby, ale jej QChar::fromAscii(c)odpowiednik
x29a
3
Ponieważ wspominasz o operatorze +, możesz to zrobić, ale rozumiesz, co się dzieje: QString p = s + QString :: number (1); bycie sa QString działa idealnie. Więc w zasadzie QString + QString jest w porządku, QString + int źle .
David Sánchez,
28

Co więcej, możesz przekonwertować cokolwiek chcesz, możesz użyć QVariant. Dla intDo QStringotrzymasz:

QVariant(3).toString();

A floatdo a stringlub stringa float:

QVariant(3.2).toString();
QVariant("5.2").toFloat();
Gabriel de Grimouard
źródło
1
QVariantrulz!
Mr.Coffee
Nazywaj mnie wariatem, ale w większym stopniu skorzystam z pytania: „Jak przekonwertować liczbę na QString?”, To jako główna odpowiedź na lekkie konwersje i inne odpowiedzi na specjalne zabiegi.
mr3
17

Jeszcze inną opcją jest użycie QTextStream i <<operatora w taki sam sposób, jak coutw C ++:

QPoint point(5,1);
QString str;
QTextStream(&str) << "Mouse click: (" << point.x() << ", " << point.y() << ").";

// OUTPUT:
// Mouse click: (5, 1).

Ponieważ operator <<()został przeciążony, możesz go używać do wielu typów, nie tylko int. QString::arg()jest na przykład przeciążony, arg(int a1, int a2)ale nie ma go arg(int a1, QString a2), więc użycie QTextStream()i operator <<jest wygodny podczas formatowania dłuższych ciągów z mieszanymi typami.

Przestroga: możesz mieć ochotę sprintf()naśladować printf()instrukcje w stylu C , ale zaleca się użycie QTextStreamlub arg()ponieważ obsługują one Unicode string.

Matthew Kraus
źródło
14

Zawsze używam QString::setNum().

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

setNum()jest przeciążony na wiele sposobów. Zobacz QStringodniesienie do klasy.

Narek
źródło
12

W najprostszej formie skorzystaj z odpowiedzi Georga Fritzschego

Dla nieco zaawansowanych możesz użyć tego,

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

Pobierz dokumentację i przykład tutaj ..

LIAK
źródło
Niestety link do strony internetowej Nokia już nie działa.
Eliyahu Skoczylas
3

Dla kompletności możesz użyć standardowej biblioteki i zrobić QString qstr = QString::fromStdString(std::to_string(42));

Morgan
źródło
3

Jeśli potrzebujesz formatowania liczb zgodnego z ustawieniami regionalnymi, użyj zamiast tego QLocale :: toString.

André
źródło