Russian Qt Forum
Августа 26, 2025, 19:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужна подсказка  (Прочитано 6265 раз)
pakulo
Гость
« : Июня 24, 2007, 08:57 »

У меня есть свой QLabel скажем
Когда я добавляю туда текст, можно написать так "&Label"
я регистрирую
Id = grabShortcut(QKeySequence::mnemonic(text));
потом мне нужно удалить символ & из текста, удаляю так
text.remove("&");
Но а если пользователь ввел && то ничего удалять понятное дело не нужно.
Как грамотно и красиво реализовать данный алгоритм?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Июня 24, 2007, 10:06 »

не понял... т.е. && оставлять, а один & удалять? Зачем так делать?
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pakulo
Гость
« Ответ #2 : Июня 24, 2007, 11:20 »

Ну так обычно происходит когда \\ слеша например, остается только \...
А если был один \, то он идет как спец символ, и если после еще и n \n, то это будет переход на новую строку...
Так же и тут... если два &&, то оно выводится просто как текст одна &, если одна &, то она вообще не выводится и идет как спец символ который обозначает что буква после & будет использована в Shortcut
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июня 24, 2007, 11:51 »

ну тогда тебе наверно регекспы помогут....
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pakulo
Гость
« Ответ #4 : Июня 24, 2007, 12:33 »

А можно примерчик?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июня 24, 2007, 14:44 »

впрочем, самый простой вариант наверно такой:

void makeStr(QString &str)
{
   str.replace("&&", "^^");
   str.replace("&", "");
   str.replace("^^", "&&");
}

str - это строка, которую надо очистить от &
"^^" - любая подстрока, которая ну уж точно не должна быть в str.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Emc
Гость
« Ответ #6 : Июня 24, 2007, 17:32 »

str.remove(QRegExp("\\&{1,1}"));
Записан
pakulo
Гость
« Ответ #7 : Июня 25, 2007, 18:28 »

Racheengel, так понятное дело можно сделать, но это не эффективно и не красиво ))... выходит шо ты строку будешь трижды проходить...

Emc, к сожалению удаляет все символы, а мне нужно что бы && замени на &, а если одна &, то удалить

буду разбираться с регулярными выражениями...

добавлено спустя 13 минут:

 Я сделал так
str.remove(QRegExp("&(?!&)"));
вроде работает...
кто что может сказать по этому поводу? Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Июня 25, 2007, 20:48 »

работает - значит хорошо Улыбающийся
но если главный параметр - это эффективность, то тогда надо просто циклами с проверкой и копированием делать.
как в С.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pakulo
Гость
« Ответ #9 : Июня 25, 2007, 21:33 »

а что эффективнее
str.remove(QRegExp("&(?!&)"));
или то что ты предложил в первых сообщениях? ))
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Июня 25, 2007, 22:03 »

честно тебе скажу - не проверял.
но сугубо интуитивно, наверно регекспы будут все таки помедленнее - т.к. там все на движке завязано, в то время как поиск-замена символов в строке - задача довольно тривиальная.
если судить по эффективности - вариант с циклом должен быть самым быстрым (хотя и самым длинным по коду).
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
pakulo
Гость
« Ответ #11 : Июня 27, 2007, 10:32 »

Ок, спасибо буду уже думать!

добавлено спустя 51 секунду:

 Напишу скорее всего свой метод, и буду через цикл удалять... ))
Записан
Sokoloff
Гость
« Ответ #12 : Января 11, 2008, 11:52 »

А в чем проблема с циклом? Бежим в цикле и если текущий символ - амперсанд удаляем его и перепрыгиваем через следующий. Тогда получаться такие замены:
& - удалиться
&& - &
&&& - &
&&&& -&&
и.т.д.
Вроде то что хотели.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.028 секунд. Запросов: 23.