LINUX.ORG.RU

Qt: русские символы в QRegExp


0

0

Hello all,

Пишу свою первую программу под Линукс. Идея такова: в один текстбокс
 вставляется некий текст; программа анализирует каждый символ и в 
другой текстбокс (точнее, QLabel) выводит тот же текст, но 
раскрашенный: английские символы - зеленым цветом; русские - красным,
 остальные - черным.

Проблема в том, что русские символы упорно не желают матчиться в 
паттерн, содержащий русский алфавит. Т.е. введенные русские буквы 
распознаются как "все остальные", т.е. выводятся черным цветом. Я уже 
пробовал даже исходник в UTF-8 перекодировать, все бесполезно... 
Подскажите, как поправить?

#include <qregexp.h>

void Form1::analyze()
{
    //printf("C++\n");
    int i;
    QRegExp latin( "[a-z]|[A-Z]" );
    QRegExp rus( "[абв]" ); //для простоты пока три буквы только
    for (i=0; i<=txt1->length(); i++) {
 if (txt1->text().mid(i,1).contains(latin)) {
            QString tmp;
            tmp = txt2->text();
            tmp.append( "<font color=darkgreen>" );
            tmp.append( txt1->text().mid(i,1) );
            tmp.append( "</font>" );
            txt2->setText(tmp);
        }
 else if (txt1->text().mid(i,1).contains(rus)) {
            QString tmp;
            tmp = txt2->text();
            tmp.append( "<font color=red>" );
            tmp.append( txt1->text().mid(i,1) );
            tmp.append( "</font>" );
            txt2->setText(tmp);
        }
 else {
            QString tmp;
            tmp = txt2->text();
            tmp.append( "<font color=black>" );
            tmp.append( txt1->text().mid(i,1) );
            tmp.append( "</font>" );
            txt2->setText(tmp);    
 }
    }
}


Итак, допустим, я ввожу текст "asdf абв" - "asdf" выводится зеленым 
цветом, а "абв" - черным, а не красным, как было задумано. Т.е. 
программа не распознает введенные русские символы как часть паттерна 
[абв].

Я, кажется, непонятно объясняю... Ну, надеюсь вы меня поймете. 

Заранее спасибо.
anonymous

Ответ на: комментарий от Spicinpv

Макросы в C++ зло. Тут можно обойтись inline функцией, если уж приперло.

hbee ★★★★
()

Уважаемый, объясните мне, зачем юзать регуляры если для задачи хватит простого перебора??

godexsoft
()
Ответ на: комментарий от Spicinpv

> А ваще макрос напиши и забудь типа

Очень мне интересно стало. Вот напишет чувак софтину, и даст ее поюзать другому чуваку (тебе, например). Так вот, вопрос, если у вас с ним локали разные, то как себя поведет твой совет

> #define rus(char) QString::fromLocal8Bit(char) //Руссификация текста

Qt такая навороченная штука, что запомнит, какая локаль была у автора? Или она нарисует тебе красивые квадратики вместо русского?

/* Чисто академический интерес */

nobody ★★
()
Ответ на: комментарий от nobody

Не знаю мож и так. Мое дело предложить, ваше дело отказаться.

Spicinpv
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.