Вот элегантная однострочная строка, в которой не используется регулярное выражение:
while (s.startsWith('0')) { s.remove(0,1); }
Не самый быстрый, но он значительно быстрее, чем версия регулярного выражения. Кроме того, если у вас есть C ++ 11, вы можете сделать что-то вроде этого:
s.remove(0,
std::distance(s.begin(),
std::find_if_not(s.begin(), s.end(),
[](QChar c) { return c == '0'; } )));
Что очень быстро.