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.