Russian Qt Forum
Ноябрь 01, 2024, 11:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пара проблем  (Прочитано 4267 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Февраль 07, 2015, 23:41 »

Привет, друзья!
Есть несколько вопросов.
1. Под linux при открытии файла через диалог у меня фильтр зависит от регистра букв. Можно ли как-то сделать как под виндой?

2. в упор не вижу ошибки:
Читаю файл. Второй иф срабатывает, третий почему-то нет.
Строка, на которой не происходит желаемого срабатывания: "#SEPARATED VOLUMES"
Код
C++ (Qt)
           if (line.contains("volume", Qt::CaseInsensitive))
           {
               if (line.contains("name", Qt::CaseInsensitive))
                   mode = names;
               else if (line.contains("separate"), Qt::CaseInsensitive)
                   mode = separated;
           }
 
Попутно хочу спросить, почему у меня не срабатывает line.contains(QRegExp("*volume*separate*"))? Линия предварительно переведена в нижний регистр.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Февраль 08, 2015, 00:18 »

Допилил свой код до:
Код
C++ (Qt)
           line = line.toLower();
           if (line.contains("volume", Qt::CaseInsensitive))
           {
               if (line.contains("name", Qt::CaseInsensitive))
                   mode = names;
               else if (line.contains("separate"), Qt::CaseInsensitive)
                   mode = separated;
               qDebug() << line.split("separate");
           }
 
else if (line.contains("separate"), Qt::CaseInsensitive) не срабатывает
qDebug() << line.split("separate"); разделяет.
Что за ерунда?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Февраль 08, 2015, 00:23 »

Вопрос 2 решил.
было
Код
C++ (Qt)
else if (line.contains("separate"), Qt::CaseInsensitive)
стало
Код
C++ (Qt)
else if (line.contains("separate", Qt::CaseInsensitive))

Но почему регэксп не работает?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #3 : Февраль 08, 2015, 01:40 »

укажи тип WildCard. просто звездочка означает «0 или более повторений символа перед ней»
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Февраль 09, 2015, 09:25 »

Спасибо, kambala.
WildCard это синтаксис bash?
Зачем было создавать два класса: QRegExp и QRegularExpression?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #5 : Февраль 09, 2015, 16:05 »

WildCard это синтаксис bash?
ну не только баша — в виндовой цмд тоже
Зачем было создавать два класса: QRegExp и QRegularExpression?
второй появился в пятерке, вроде полностью ICU-совместим (не страдает ограничениями QRegExp)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Февраль 09, 2015, 17:11 »

не страдает ограничениями QRegExp
Но при этом не поддерживает WildCard...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #7 : Февраль 09, 2015, 20:16 »

переписать вайлдкард на регэксп - секундное дело Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
vizir.vs
Гость
« Ответ #8 : Февраль 10, 2015, 12:32 »

Если я все правильно помню, то надо в вашем регексе не хватает точек. Должно быть так:
.*volume.*separate.*
в регексе
*volume*separate*
первая звезда фиг его знает что будет делать, вторая говорит о том, что после m может быть от 0 и до бесконечности букв e, вторая обозначает тоже самое. А я думаю, что вы другое имели ввиду.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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