псевдокод в слеую левой пяткой:
QStringList someList;
auto parse = [](const QString &s){
QString letters, num;
int pos = 0;
while(pos<s.size() && (s[pos].isLatter() || s[pos] = ' ' || s[pos]= '_')) { if(s[pos].isLatter())letters += s[pos]; }
while(pos<s.size() && (s[pos].isDigit() || s[pos] = ' ' || s[pos]= '_')) { if(s[pos].isDigit()) num += s[pos]; }
return QPair<QString, int>(letters, num.toInt());
};
std::sort_if(someList.begin(), someList.end(),
[](const QString&left, const QString &rigth) {
auto p1 = parse(left);
auto p2 = parse(right);
if(p1.first < p2.first) return true;
if(p1.first > p2.first) return false;
if(p1.second < p2.second) return true;
return false;}
p.s. ну и неплохо написать логику сортировки, мы тут не телепаты догадываться. Малоли что у вас за хитрости и зачем вам так сортировать.