Как мне проверить первый символ QString? - PullRequest
4 голосов
/ 06 декабря 2011

Я хочу, чтобы следующий код удалял начальный ноль из цены (0,00 следует сократить до 0,00)

QString price1 = "0.00";
if( price1.at( 0 ) == "0" ) price1.remove( 0 );

Это дает мне следующую ошибку: «ошибка: преобразование из« const char [2] »в« QChar »неоднозначно»

Ответы [ 5 ]

6 голосов
/ 06 декабря 2011

Основная проблема заключается в том, что Qt видит "0" в виде строки ASCII с нулевым символом в конце, поэтому сообщение компилятора о const char[2].

также, QString::remove() принимает два аргумента.Итак, ваш код должен быть:

if( price1.at( 0 ) == '0' ) price1.remove( 0, 1 );

Это сборка и запуск на моей системе (Qt 4.7.3, VS2005).

4 голосов
/ 06 декабря 2011

Попробуйте это:

price1.at( 0 ) == '0' ?
2 голосов
/ 06 декабря 2011

Проблема в том, что функция 'at' возвращает QChar, который является объектом, который нельзя сравнивать с нативным символом / строкой "0".У вас есть несколько вариантов, но я просто поставлю два здесь:

if( price1.at(0).toAscii() == '0')

или

if( price1.at(0).digitValue() == 0)

digitValue возвращает -1, если символ не является цифрой.

0 голосов
/ 08 ноября 2018

QChar QString :: front () const Возвращает первый символ в строка. То же, что и в (0).

Эта функция предназначена для совместимости с STL.

Предупреждение: вызов этой функции для пустой строки составляет неопределенное поведение.

http://doc.qt.io/qt-5/qstring.html#front

QString s("foobar");

/* If string is not empty or null, check to see if the first character equals f */
if (!s.isEmpty() && s.front()=="f") {
    return;
}
0 голосов
/ 08 ноября 2018
QString s("foobar");
if (s[0]=="f") {
    return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...