How to convert QString to int?
Solution 1
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());
}
Solution 2
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
Solution 3
The string you have here contains a floating point number with a unit. I'd recommend splitting that string into a number and unit part with QString::split()
.
Then use toDouble()
to get a floating point number and round as you want.
Solution 4
You can use:
QString str = "10";
int n = str.toInt();
Output:
n = 10
Solution 5
Use .toInt()
for int .toFloat()
for float and .toDouble()
for double
Admin
Updated on July 05, 2022Comments
-
Admin almost 2 years
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"
-
Lennart Rolland about 8 yearsOP is asking about Qt, and sscanf is not Qt
-
eyllanesc about 6 yearsthe same as most answers propose, for me it is a redundant response.
-
DomTomCat about 6 yearsAlthough this answer is ok for the specific example of the asker, I'm missing the success test of @Mikhail's answer, which should always be checked.
-
Neel Basu about 6 yearsYes. That’s correct. It’s an one liner. But yes one should always verify such operations
-
Steve Folly about 5 yearsRegardless of whether sscanf is the Qt way or not, this is just hideous! qPrintable returns an array of the current size of the string. The operation is undefined if the part of the string in
Abcd
is longer than its current value - buffer overflows. Here be dragons.