crossplatform.ru

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


  Ответ в Text Finder ....
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
KLIF Дата 5.11.2010, 0:15
 
Цитата(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;
            }
}
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;
}
Попробуй, его адаптировать под себя.
KLIF Дата 4.11.2010, 21:00
  Вопрос .... подскажите пожалуйста .....
Что нужно сделать : при поиске слова оно его подсвечивает , но при поиске второго слова первое остается подсвеченным .... а должно очищаться....
KLIF Дата 2.11.2010, 1:51
  Так нашел вроде че за трабл.... оно не ищет если слово встречается не более одного раза .....(Нашел методом народного тыка ) )//Нет что то не то ... ((
KLIF Дата 2.11.2010, 0:50
  Нужно сделать подсветку искомого слова., нашел пример 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("Вибачте, неможливо знайти слово")); // вот сюда .....
                            }
               }

            
    }

Я не пойму в чем трабл : если делать это в отдельном проекте то все пашет , а если делать это в моем проекте то оно не ищет а переходит сразу на див. код.....
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 1:25