Название: Нужна подсказка Отправлено: pakulo от Июня 24, 2007, 08:57 У меня есть свой QLabel скажем
Когда я добавляю туда текст, можно написать так "&Label" я регистрирую Id = grabShortcut(QKeySequence::mnemonic(text)); потом мне нужно удалить символ & из текста, удаляю так text.remove("&"); Но а если пользователь ввел && то ничего удалять понятное дело не нужно. Как грамотно и красиво реализовать данный алгоритм? Название: Нужна подсказка Отправлено: Racheengel от Июня 24, 2007, 10:06 не понял... т.е. && оставлять, а один & удалять? Зачем так делать?
Название: Нужна подсказка Отправлено: pakulo от Июня 24, 2007, 11:20 Ну так обычно происходит когда \\ слеша например, остается только \...
А если был один \, то он идет как спец символ, и если после еще и n \n, то это будет переход на новую строку... Так же и тут... если два &&, то оно выводится просто как текст одна &, если одна &, то она вообще не выводится и идет как спец символ который обозначает что буква после & будет использована в Shortcut Название: Нужна подсказка Отправлено: Racheengel от Июня 24, 2007, 11:51 ну тогда тебе наверно регекспы помогут....
Название: Нужна подсказка Отправлено: pakulo от Июня 24, 2007, 12:33 А можно примерчик?
Название: Нужна подсказка Отправлено: Racheengel от Июня 24, 2007, 14:44 впрочем, самый простой вариант наверно такой:
void makeStr(QString &str) { str.replace("&&", "^^"); str.replace("&", ""); str.replace("^^", "&&"); } str - это строка, которую надо очистить от & "^^" - любая подстрока, которая ну уж точно не должна быть в str. Название: Нужна подсказка Отправлено: Emc от Июня 24, 2007, 17:32 str.remove(QRegExp("\\&{1,1}"));
Название: Нужна подсказка Отправлено: pakulo от Июня 25, 2007, 18:28 Racheengel, так понятное дело можно сделать, но это не эффективно и не красиво ))... выходит шо ты строку будешь трижды проходить...
Emc, к сожалению удаляет все символы, а мне нужно что бы && замени на &, а если одна &, то удалить буду разбираться с регулярными выражениями... добавлено спустя 13 минут: Я сделал так str.remove(QRegExp("&(?!&)")); вроде работает... кто что может сказать по этому поводу? :) Название: Нужна подсказка Отправлено: Racheengel от Июня 25, 2007, 20:48 работает - значит хорошо :)
но если главный параметр - это эффективность, то тогда надо просто циклами с проверкой и копированием делать. как в С. Название: Нужна подсказка Отправлено: pakulo от Июня 25, 2007, 21:33 а что эффективнее
str.remove(QRegExp("&(?!&)")); или то что ты предложил в первых сообщениях? )) Название: Нужна подсказка Отправлено: Racheengel от Июня 25, 2007, 22:03 честно тебе скажу - не проверял.
но сугубо интуитивно, наверно регекспы будут все таки помедленнее - т.к. там все на движке завязано, в то время как поиск-замена символов в строке - задача довольно тривиальная. если судить по эффективности - вариант с циклом должен быть самым быстрым (хотя и самым длинным по коду). Название: Нужна подсказка Отправлено: pakulo от Июня 27, 2007, 10:32 Ок, спасибо буду уже думать!
добавлено спустя 51 секунду: Напишу скорее всего свой метод, и буду через цикл удалять... )) Название: Re: Нужна подсказка Отправлено: Sokoloff от Января 11, 2008, 11:52 А в чем проблема с циклом? Бежим в цикле и если текущий символ - амперсанд удаляем его и перепрыгиваем через следующий. Тогда получаться такие замены:
& - удалиться && - & &&& - & &&&& -&& и.т.д. Вроде то что хотели. |