Jak przekonwertować int na QString?


Odpowiedzi:


656

Użyj QString::number():

int i = 42;
QString s = QString::number(i);

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);

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();

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.


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.


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 ..


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));


3

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.