Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert QString to int?

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" 
like image 225
user2398614 Avatar asked May 19 '13 10:05

user2398614


People also ask

How do you convert QString to string?

You can use: QString qs; // do things std::cout << qs. toStdString() << std::endl; It internally uses QString::toUtf8() function to create std::string, so it's Unicode safe as well.

How do you convert QString to QDate?

QString date_string_on_db = "20/12/2015"; QDate Date; Date. fromString(date_string_on_db,"dd/MM/YYYY");

How do you convert to int in C++?

One effective way to convert a string object into a numeral int is to use the stoi() function. This method is commonly used for newer versions of C++, with is being introduced with C++11. It takes as input a string value and returns as output the integer version of it.


2 Answers

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()); } 
like image 92
Neel Basu Avatar answered Sep 19 '22 21:09

Neel Basu


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.

like image 20
confusopoly Avatar answered Sep 22 '22 21:09

confusopoly