crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Text Finder ....
KLIF
  опции профиля:
сообщение 2.11.2010, 0:50
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 90
Регистрация: 19.5.2010
Пользователь №: 1739

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нужно сделать подсветку искомого слова., нашел пример Text Finder Example (http://doc.trolltech.com/4.7/uitools-textfinder.html) ...
Все банально просто есть lineEdit в которое вводиться искомое слово , и есть plainTextEdit в котором отображается сохраненный в файле текст....

Вот мой код :
Раскрывающийся текст
void DemAstPro::on_pushButton_2_find_help_clicked()

{

    QString searchString;
            searchString = ui->lineEdit_4_find_help->text();
             QTextDocument *document = ui->plainTextEdit_help->document();

             bool found = false;

             if (isFirstTime == false)
                 document->undo();

             if (searchString.isEmpty())
             {
                    QMessageBox::information(this, tr("Поле пошуку пусте"),
                        tr("Будь-ласка введіть слово для пошуку і натисніть Пошук"));
             }
             else
             {

                 QTextCursor highlightCursor(document);
                 QTextCursor cursor(document);

                 cursor.beginEditBlock();

                 QTextCharFormat plainFormat(highlightCursor.charFormat());
                 QTextCharFormat colorFormat = plainFormat;
                 colorFormat.setBackground(Qt::yellow);


                 while (!highlightCursor.isNull() && !highlightCursor.atEnd())
                 {
                     highlightCursor = document->find(searchString, highlightCursor, QTextDocument::FindWholeWords);

                     if (!highlightCursor.isNull())
                     {
                         found = true;
                         highlightCursor.movePosition(QTextCursor::WordRight,
                                                QTextCursor::KeepAnchor);
                         highlightCursor.mergeCharFormat(colorFormat);
                     }
                 }

                 cursor.endEditBlock();

                 isFirstTime = false;

                         if (found == false)
                            {
                             QMessageBox::information(this, tr("Слово не знайдене"), tr("Вибачте, неможливо знайти слово")); // вот сюда .....
                            }
               }

            
    }

Я не пойму в чем трабл : если делать это в отдельном проекте то все пашет , а если делать это в моем проекте то оно не ищет а переходит сразу на див. код.....

Сообщение отредактировал kwisp - 2.11.2010, 11:52
Причина редактирования: используй тег expand для динных сообщений
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KLIF
  опции профиля:
сообщение 2.11.2010, 1:51
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 90
Регистрация: 19.5.2010
Пользователь №: 1739

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так нашел вроде че за трабл.... оно не ищет если слово встречается не более одного раза .....(Нашел методом народного тыка ) )//Нет что то не то ... ((

Сообщение отредактировал igor_bogomolov - 2.11.2010, 8:25
Причина редактирования: не цитируй такие длинные сообщения
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KLIF
  опции профиля:
сообщение 4.11.2010, 21:00
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 90
Регистрация: 19.5.2010
Пользователь №: 1739

Спасибо сказали: 0 раз(а)




Репутация:   0  


Вопрос .... подскажите пожалуйста .....
Что нужно сделать : при поиске слова оно его подсвечивает , но при поиске второго слова первое остается подсвеченным .... а должно очищаться....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 4.11.2010, 23:44
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


KLIF, твой код не смотрел, но когда то решал такую же задачу. Самому, на самом деле, было лень возиться, выдрал решение из исходников Qt Assistant.

Вот кусок кода
Раскрывающийся текст
void LogViewPlugin::findNext()
{
    find(ui->leSearch->text(), true);
}

void LogViewPlugin::findPrevious()
{
    find(ui->leSearch->text(), false);
}

void LogViewPlugin::findCurrentText(const QString &text)
{
    find(text, true);
}

void LogViewPlugin::find(const QString &ttf, bool forward)
{
    QPalette p = ui->leSearch->palette();
    p.setColor(QPalette::Active, QPalette::Base, Qt::white);

    bool found = false;

    found = findInTextBrowser(ttf, forward);

    if (!found && !ttf.isEmpty())
        p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102));

    ui->leSearch->setPalette(p);
}

bool LogViewPlugin::findInTextBrowser(const QString &ttf, bool forward)
{
    QTextDocument *doc = ui->logView->document();
    QTextCursor cursor = ui->logView->textCursor();

    if (!doc || cursor.isNull())
        return false;

    QTextDocument::FindFlags options;

    if (cursor.hasSelection()) {
        cursor.setPosition(forward ? cursor.position() : cursor.anchor(),
            QTextCursor::MoveAnchor);
    }

    if (!forward)
        options |= QTextDocument::FindBackward;

    if (ui->cbSens->isChecked())
        options |= QTextDocument::FindCaseSensitively;

    bool found = true;
    QTextCursor newCursor = doc->find(ttf, cursor, options);
    if (newCursor.isNull()) {
        QTextCursor ac(doc);
        ac.movePosition(options & QTextDocument::FindBackward
            ? QTextCursor::End : QTextCursor::Start);
        newCursor = doc->find(ttf, ac, options);
        if (newCursor.isNull()) {
            found = false;
            newCursor = cursor;
        }
    }
    ui->logView->setTextCursor(newCursor);
    return found;
}
Попробуй, его адаптировать под себя.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
KLIF
  опции профиля:
сообщение 5.11.2010, 0:15
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 90
Регистрация: 19.5.2010
Пользователь №: 1739

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(igor_bogomolov @ 4.11.2010, 23:44) *
KLIF, твой код не смотрел, но когда то решал такую же задачу. Самому, на самом деле, было лень возиться, выдрал решение из исходников Qt Assistant.

Вот кусок кода
Раскрывающийся текст
void LogViewPlugin::findNext()
{
    find(ui->leSearch->text(), true);
}

void LogViewPlugin::findPrevious()
{
    find(ui->leSearch->text(), false);
}

void LogViewPlugin::findCurrentText(const QString &text)
{
    find(text, true);
}

void LogViewPlugin::find(const QString &ttf, bool forward)
{
    QPalette p = ui->leSearch->palette();
    p.setColor(QPalette::Active, QPalette::Base, Qt::white);

    bool found = false;

    found = findInTextBrowser(ttf, forward);

    if (!found && !ttf.isEmpty())
        p.setColor(QPalette::Active, QPalette::Base, QColor(255, 102, 102));

    ui->leSearch->setPalette(p);
}

bool LogViewPlugin::findInTextBrowser(const QString &ttf, bool forward)
{
    QTextDocument *doc = ui->logView->document();
    QTextCursor cursor = ui->logView->textCursor();

    if (!doc || cursor.isNull())
        return false;

    QTextDocument::FindFlags options;

    if (cursor.hasSelection()) {
        cursor.setPosition(forward ? cursor.position() : cursor.anchor(),
            QTextCursor::MoveAnchor);
    }

    if (!forward)
        options |= QTextDocument::FindBackward;

    if (ui->cbSens->isChecked())
        options |= QTextDocument::FindCaseSensitively;

    bool found = true;
    QTextCursor newCursor = doc->find(ttf, cursor, options);
    if (newCursor.isNull()) {
        QTextCursor ac(doc);
        ac.movePosition(options & QTextDocument::FindBackward
            ? QTextCursor::End : QTextCursor::Start);
        newCursor = doc->find(ttf, ac, options);
        if (newCursor.isNull()) {
            found = false;
            newCursor = cursor;
        }
    }
    ui->logView->setTextCursor(newCursor);
    return found;
}
Попробуй, его адаптировать под себя.

Огромное спасибо обязательно посмотрю ... но я уже сделал сам ... Кому надо пользуйтесь ..
void DemAstPro::on_pushButton_3_find_exm_clicked()

{
    QString searchString = ui->lineEdit_5_find_exm->text();
         /*QTextDocument */document = ui->plainTextEdit_2_exm->document();
         bool found = false;



         if (isFirstTime_1 == false)
         {
             document->undo();

         }
         if (searchString.isEmpty())
         {
             QMessageBox::information(this, tr("Поле пошуку пусте"),
                                 tr("Будь-ласка введіть слово для пошуку і натисніть Пошук"));
             return;
         }
         else
         {
             QTextCursor highlightCursor(document);
             QTextCursor cursor(document);

             cursor.beginEditBlock();

             QTextCharFormat plainFormat(highlightCursor.charFormat());
             QTextCharFormat colorFormat = plainFormat;
             colorFormat.setBackground(Qt::yellow);

             while (!highlightCursor.isNull() && !highlightCursor.atEnd())
             {
                 highlightCursor = document->find(searchString, highlightCursor, QTextDocument::FindWholeWords);

                 if (!highlightCursor.isNull())
                 {
                     found = true;
                     highlightCursor.movePosition(QTextCursor::WordRight,
                                            QTextCursor::KeepAnchor);
                     highlightCursor.mergeCharFormat(colorFormat);
                 }
             }

             cursor.endEditBlock();
             isFirstTime_1 = false;
           }
         if (found == false)
            {
             QMessageBox::information(this, tr("Слово не знайдене"),
                                 tr("Вибачте, неможливо знайти слово"));
             isFirstTime_1 = true;
             return;
            }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.5.2020, 8:25