Russian Qt Forum

Qt => Общие вопросы => Тема начата: __Heaven__ от Февраль 07, 2015, 23:41



Название: Пара проблем
Отправлено: __Heaven__ от Февраль 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*"))? Линия предварительно переведена в нижний регистр.


Название: Re: Пара проблем
Отправлено: __Heaven__ от Февраль 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"); разделяет.
Что за ерунда?


Название: Re: Пара проблем
Отправлено: __Heaven__ от Февраль 08, 2015, 00:23
Вопрос 2 решил.
было
Код
C++ (Qt)
else if (line.contains("separate"), Qt::CaseInsensitive)
стало
Код
C++ (Qt)
else if (line.contains("separate", Qt::CaseInsensitive))

Но почему регэксп не работает?


Название: Re: Пара проблем
Отправлено: kambala от Февраль 08, 2015, 01:40
укажи тип WildCard. просто звездочка означает «0 или более повторений символа перед ней»


Название: Re: Пара проблем
Отправлено: __Heaven__ от Февраль 09, 2015, 09:25
Спасибо, kambala.
WildCard это синтаксис bash?
Зачем было создавать два класса: QRegExp и QRegularExpression?


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


Название: Re: Пара проблем
Отправлено: __Heaven__ от Февраль 09, 2015, 17:11
не страдает ограничениями QRegExp
Но при этом не поддерживает WildCard...


Название: Re: Пара проблем
Отправлено: kambala от Февраль 09, 2015, 20:16
переписать вайлдкард на регэксп - секундное дело :)


Название: Re: Пара проблем
Отправлено: vizir.vs от Февраль 10, 2015, 12:32
Если я все правильно помню, то надо в вашем регексе не хватает точек. Должно быть так:
.*volume.*separate.*
в регексе
*volume*separate*
первая звезда фиг его знает что будет делать, вторая говорит о том, что после m может быть от 0 и до бесконечности букв e, вторая обозначает тоже самое. А я думаю, что вы другое имели ввиду.