# How to convert QString to int?

65

I have a `QString` in my sources. So I need to convert it to integer without "Kb".

I tried `Abcd.toInt()` but it does not work.

``````QString Abcd = "123.5 Kb"
``````

This question is tagged with `c++` `string` `qt` `int` `qstring`

91

You don't have all digit characters in your string. So you have to split by space

``````QString Abcd = "123.5 Kb";
Abcd.split(" ")[0].toInt();    //convert the first part to Int
Abcd.split(" ")[0].toDouble(); //convert the first part to double
Abcd.split(" ")[0].toFloat();  //convert the first part to float
``````

Update: I am updating an old answer. That was a straight forward answer to the specific question, with a strict assumption. However as noted by @DomTomCat in comments and @Mikhail in answer, In general one should always check whether the operation is successful or not. So using a boolean flag is necessary.

``````bool flag;
double v = Abcd.split(" ")[0].toDouble(&flag);
if(flag){
// use v
}
``````

Also if you are taking that string as user input, then you should also be doubtful about whether the string is really splitable with space. If there is a possibility that the assumption may break then a regex verifier is more preferable. A regex like the following will extract the floating point value and the prefix character of 'b'. Then you can safely convert the captured strings to double.

``````([0-9]*\.?[0-9]+)\s+(\w[bB])
``````

You can have an utility function like the following

``````QPair<double, QString> split_size_str(const QString& str){
QRegExp regex("([0-9]*\\.?[0-9]+)\\s+(\\w[bB])");
int pos = regex.indexIn(str);
QStringList captures = regex.capturedTexts();
if(captures.count() > 1){
double value = captures[1].toDouble(); // should succeed as regex matched
QString unit = captures[2]; // should succeed as regex matched
return qMakePair(value, unit);
}
return qMakePair(0.0f, QString());
}
``````

9

Don't forget to check if the conversion was successful!

``````bool ok;
auto str= tr("1337");
str.toDouble(&ok); // returns 1337.0, ok set to true
auto strr= tr("LEET");
strr.toDouble(&ok); // returns 0.0, ok set to false
``````