2016-02-19 10 views
5

Chcę użyć .arg() na ciąg. To jest przykład:QString :: arg() z numerem po placeholder

qDebug() << QString("%11%2").arg(66).arg(77); 

chciałbym uzyskać wyjście 66177 ale oczywiście nie jest to rzeczywista moc od %11 jest interpretowany jako zastępczy # 11 zamiast uchwytu miejsce # 1, a następnie dosłownym 1.

Czy istnieje lepsze rozwiązanie niż następujące?

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77); 
+2

'qDebug() << QString ("% 011% 02"), Arg (66) .arg (77); ' – Meefte

Odpowiedz

1

arg zastępuje sekwencję o najniższej wartości po %. Zakres musi wynosić od 1 do 99. Więc nie musisz używać indeksu 1 możesz użyć dwucyfrowej liczby zamiast jednej cyfry.

Spróbuj i zobacz, co się stanie:

qDebug() << QString("%111%22").arg(66).arg(77); 

To powinno dać oczekiwany rezultat (mam go przetestować na qt 5.4 i działa idealnie).

Ja również testowane postaci roztworu komentarz pod pytaniem i to działa.

qDebug() << QString("%011%02").arg(66).arg(77); 
+0

Dobre rozwiązanie. Jednak trochę trudne do odczytania. Zdecydowanie potrzebuje komentarza kodu. – Silicomancer

1

Poczucie arg() jest to, że zastąpienie wszystko od %1 do %99 dlatego nie powinien mieć %11. Istnieje kilka sposobów na uniknięcie tego.

Twoja droga jest w porządku, jak można mieć 1 jako stały wcześniej w kodzie:

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77); 

Albo możesz mieć:

qDebug() << QString("%1").arg(66) + "1" + QString("%1").arg(77); 

Korzystanie QString::number jest ok też, jak określono w komentarz.

1

Wypróbuj jedną z następujących metod:

  • QString::number(66) + "1" + QString::number(77)
  • QString("%1 1 %2").arg(66).arg(77).replace(" ", "")
+0

Potrzebuję zaawansowanego formatowania liczb (które nie jest dostępne przy użyciu QString :: number). Nadal jest to z pewnością alternatywa dla standardowych przypadków. – Silicomancer

+0

Rozwiązaniem Marka jest z pewnością uniwersalne narzędzie *** do mózgów ***. – Murphy