Russian Qt Forum
Августа 26, 2025, 19:14
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Нужна подсказка
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Нужна подсказка (Прочитано 6266 раз)
pakulo
Гость
Нужна подсказка
«
:
Июня 24, 2007, 08:57 »
У меня есть свой QLabel скажем
Когда я добавляю туда текст, можно написать так "&Label"
я регистрирую
Id = grabShortcut(QKeySequence::mnemonic(text));
потом мне нужно удалить символ & из текста, удаляю так
text.remove("&");
Но а если пользователь ввел && то ничего удалять понятное дело не нужно.
Как грамотно и красиво реализовать данный алгоритм?
Записан
Racheengel
Джедай : наставник для всех
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
Сообщений: 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
Сообщений: 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
Сообщений: 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
Сообщений: 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
Гость
Re: Нужна подсказка
«
Ответ #12 :
Января 11, 2008, 11:52 »
А в чем проблема с циклом? Бежим в цикле и если текущий символ - амперсанд удаляем его и перепрыгиваем через следующий. Тогда получаться такие замены:
& - удалиться
&& - &
&&& - &
&&&& -&&
и.т.д.
Вроде то что хотели.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...