Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTextEdit, маркер
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
breeve
Подскажите, как можно сделать маркер в тексте. Для примера на этом сайте, если в поиск вбить фразу, то он выделит в постах те слова которые я вбил: желтый фон, красный текст.
Нашел как можно покрасить текст, во всем TextEdit'е но как покрасить определенные слова?
И как сделать так что после установки маркера например на два слова, сделать так чтобы нажав правой только на эти слова в контекстном меню был Action убрать выделение? Заранее благодарен
abc
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
Цитата
вряд ли возможно

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

breeve
Сделал так чтобы менял выделенный фрагмент текста:
    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
Цитата(breeve @ 3.4.2011, 2:10) *
В каком пункте могут возникнуть проблемы?

пожалуй, я погорячился)
- поставили курсор. предположим, он стоит где-то в середине подсвеченной фразы
- передвигаем его назад, и с каждым передвижением проверяем, какой под курсором backgroundcolor
- как только backgroundcolor стал белым, выделяем, начиная с этой позиции, известное число символов, и изменяем backgroundcolor
breeve
Возникло несколько несколько вопросов:
- как выделить текст программно?
- можно ли как-то покрасить без использования функции find() ? (в определенном случае он окрашивает не то что я выделил)
abc
find производит выделение указанного текста. Без выделения, как я понимаю, тут не обойтись. Что именно не так?
Цитата(breeve @ 4.4.2011, 0:35) *
как выделить текст программно?

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

Выделяет не то что надо. Причем только в этом случае(если текст одинаковый и выделять именно так - с одного слова на другое) неправильно.Пример на видео. Код:
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
Цитата(breeve @ 4.4.2011, 0:35) *
как выделить текст программно?
Общие задачи редактирования форматированного текста
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.