Изменение QString, которая содержит «\» - PullRequest
1 голос
/ 26 марта 2019

Я пытаюсь изменить QString. Qstring, которую я пытаюсь изменить, это

"\002"

Однако, когда я пытаюсь изменить его, строка либо полностью удаляется, либо не показывает изменений.

Я пробовал

String.split("\"");
String.remove("\"");
String.remove(QChar('\'');

по какой-то причине Qt требует, чтобы я добавил дополнительный "или", чтобы компилировать и не выдавать ошибки

То, что у меня сейчас есть, это

string = pointer->data.info.get_type();

который в соответствии с отладчиком возвращает "\ 002"

string = string.remove(QChar('\''));

функция удаления после этого ничего не делает.

Я ожидаю удалить \ из строки, но либо он полностью удаляется, либо ничего не происходит. В чем может быть проблема, и как мне изменить строку Qstring, чтобы она состояла только из числовых значений?

Ответы [ 2 ]

6 голосов
/ 26 марта 2019

В данный момент вы просите Qt удалить " из вашей строки, а не \. Чтобы удалить \, вам нужно убежать , точно так же, как вы сбежали ", т.е. remove("\\").

3 голосов
/ 26 марта 2019

Прежде всего ваша строка "\002" не содержит слеш, кавычек или апострофов.Читайте о строковых литералах C ++.Это escape-последовательность .Примечание \nnn представляет произвольное восьмеричное значение!

Таким образом, ваш литерал содержит только один символ десятичного значения 2!Это ASCII значение пространственного кода: STX (начало текста)

В результате этот код:

String.split("\"");
String.remove("\"");
String.remove(QChar('\'');

не будет разбиваться или что-либо еще, так какСтрока не содержит кавычек или апострофа.Он также не пытается разделить или удалить символ косой черты, поскольку опять-таки это escape-последовательность, но другого типа.

Теперь помните, что отладчик показывает вам эти непечатаемые символы в экранированной форме, чтобы показать вам фактическое содержимое.В живом приложении пользователь не увидит ничего или какого-то странного символа.

...