簡體   English   中英

如何將QString轉換為int?

[英]How to convert QString to int?

我的源代碼中有一個QString 所以我需要將它轉換為沒有“Kb”的整數

我試過Abcd.toInt()但它不起作用。

QString Abcd = "123.5 Kb"

您的字符串中沒有所有數字字符。 所以你必須按空間划分

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

更新 :我正在更新舊答案。 這是對具體問題的直接回答,並有嚴格的假設。 但正如@DomTomCat在評論和@Mikhail的回答中所指出的那樣,一般應該檢查操作是否成功。 因此,使用布爾標志是必要的。

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

此外,如果您將該字符串作為用戶輸入,那么您還應該懷疑該字符串是否真的可以與空格分開。 如果假設可能破壞,則更優選正則表達式驗證器。 像下面這樣的正則表達式將提取浮點值和'b'的前綴字符。 然后,您可以安全地將捕獲的字符串轉換為double。

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

您可以使用如下所示的實用程序功能

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());
}

您在此處的字符串包含帶有單位的浮點數。 我建議使用QString::split()將該字符串拆分為數字和單位部分。

然后使用toDouble()獲取浮點數並根據需要進行舍入。

不要忘記檢查轉換是否成功!

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

使用.toInt()對INT .toFloat()浮法和.toDouble()

toInt();

作為建議,您還可以使用QChar::digitValue()來獲取數字的數值。 例如:

for (int var = 0; var < myString.length(); ++var) {
    bool ok;
    if (myString.at(var).isDigit()){
        int digit = myString.at(var).digitValue();
        //DO SOMETHING HERE WITH THE DIGIT
    }
}

來源: 將一個元素從QString轉換為int

您可以使用:

QString str = "10";
int n = str.toInt();

輸出:

n = 10

關於評論:

sscanf(Abcd, "%f %s", &f,&s);

給出錯誤。

這是正確的方法:

sscanf(Abcd, "%f %s", &f,qPrintable(s));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM