Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTextEdit, маркер

Автор: breeve 2.4.2011, 23:07

Подскажите, как можно сделать маркер в тексте. Для примера на этом сайте, если в поиск вбить фразу, то он выделит в постах те слова которые я вбил: желтый фон, красный текст.
Нашел как можно покрасить текст, во всем TextEdit'е но как покрасить определенные слова?
И как сделать так что после установки маркера например на два слова, сделать так чтобы нажав правой только на эти слова в контекстном меню был Action убрать выделение? Заранее благодарен

Автор: abc 3.4.2011, 0:35

ui->textEdit_read->moveCursor(QTextCursor::End);
    if(ui->textEdit_read->find("Этот текст будет подсвечен", QTextDocument::FindBackward))
        ui->textEdit_read->setTextBackgroundColor(Qt::yellow);
    ui->textEdit_read->moveCursor(QTextCursor::End);


Цитата(breeve @ 3.4.2011, 0:07) *
чтобы нажав правой только на эти слова в контекстном меню

вряд ли возможно

Автор: breeve 3.4.2011, 1:10

Цитата
вряд ли возможно

Почему это не может быть возможным?
Ну если нет стандартных средств я предполагаю примерно такой алгоритм:
- Найти позицию фразы(ее координаты а точнее область);
- Перехват нажатия правой кнопки мыши в данной области;
- И добавление в контекстное меню позиции.
В каком пункте могут возникнуть проблемы?


Автор: breeve 3.4.2011, 2:17

Сделал так чтобы менял выделенный фрагмент текста:

    QTextEdit *aEdit = activeEdit();
    QString select = aEdit->textCursor().selectedText();
    int sEnd = aEdit->textCursor().selectionEnd();

    QTextCursor tx = aEdit->textCursor();
    tx.setPosition(sEnd);
    aEdit->setTextCursor(tx);

    if(aEdit->find(select, QTextDocument::FindBackward))
    {
        aEdit->setTextBackgroundColor(Qt::yellow);
    }

Автор: abc 3.4.2011, 13:06

Цитата(breeve @ 3.4.2011, 2:10) *
В каком пункте могут возникнуть проблемы?

пожалуй, я погорячился)
- поставили курсор. предположим, он стоит где-то в середине подсвеченной фразы
- передвигаем его назад, и с каждым передвижением проверяем, какой под курсором backgroundcolor
- как только backgroundcolor стал белым, выделяем, начиная с этой позиции, известное число символов, и изменяем backgroundcolor

Автор: breeve 3.4.2011, 23:35

Возникло несколько несколько вопросов:
- как выделить текст программно?
- можно ли как-то покрасить без использования функции find() ? (в определенном случае он окрашивает не то что я выделил)

Автор: abc 4.4.2011, 11:47

find производит выделение указанного текста. Без выделения, как я понимаю, тут не обойтись. Что именно не так?

Цитата(breeve @ 4.4.2011, 0:35) *
как выделить текст программно?

вот это вопрос. Из документации я понял, как выделить слово под курсором
void QTextCursor::select ( SelectionType selection )
как выделить несколько предпочитаемых символов, я не узнал

Автор: breeve 4.4.2011, 18:50

Цитата
Что именно не так?

Выделяет не то что надо. Причем только в этом случае(если текст одинаковый и выделять именно так - с одного слова на другое) неправильно.Пример на http://depositfiles.com/files/2pmi10wfr. Код:
void MarkedTextEdit::markSelectedText(bool mark)
{
    QString select = this->textCursor().selectedText();
    int cursorPos = this->textCursor().position();
    int sEnd = this->textCursor().selectionEnd();
    QTextCursor tx = this->textCursor();
    tx.setPosition(sEnd);
    this->setTextCursor(tx);
    qDebug() << select << this->textCursor().position();

    if(this->find(select, QTextDocument::FindBackward))
    {
        if(mark)
            this->setTextBackgroundColor(Qt::yellow);
        else
            this->setTextBackgroundColor(Qt::white);
    }
    tx.setPosition(cursorPos);
    this->setTextCursor(tx);
}



Автор: breeve 10.4.2011, 23:09

Цитата(breeve @ 4.4.2011, 0:35) *
как выделить текст программно?
http://doc.crossplatform.ru/qt/4.5.0/richtext-common-tasks.html

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)