Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: warlock от Февраль 04, 2010, 20:15



Название: Text Editor Widget - есть ли готовое решение?
Отправлено: warlock от Февраль 04, 2010, 20:15
Собственно интересует вопрос, если ли виджет, который реализует самую банальную функциональность текстового редактора. Достаточно даже таковой как вот при публикации темы на этом форуме (жирный, курсив, подчеркнутый текст, выравнивание, цвет и размер текста).

Может быть я чего-то недосмотрел в стандарной библиотеке, а может быть все перед носом и находится - но я не нашел.
Буду признателен за любые ссылки, советы и рекомендации по этой теме. 


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: sLiva от Февраль 04, 2010, 20:19
Собственно интересует вопрос, если ли виджет, который реализует самую банальную функциональность текстового редактора. Достаточно даже таковой как вот при публикации темы на этом форуме (жирный, курсив, подчеркнутый текст, выравнивание, цвет и размер текста).

Может быть я чего-то недосмотрел в стандарной библиотеке, а может быть все перед носом и находится - но я не нашел.
Буду признателен за любые ссылки, советы и рекомендации по этой теме. 

http://qt.nokia.com/doc/4.6/demos-textedit.html


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: lit-uriy от Февраль 05, 2010, 04:35
warlock, есть в комплекте с Qt замечательная программа Qt Demo, называется. Не поленись запусти её и посмотри возможности на примерах/демках, все исходники в комплекте с Qt.


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: vadim303 от Февраль 05, 2010, 09:45
Есть довольно мощный компонент. Вопрос только в том действительно ли вам нужна его мощь :)

QScintilla is a port to Qt of the Scintilla editing component.

As well as features found in standard text editing components, Scintilla includes features especially useful when editing and debugging source code:

syntax styling with support for over 70 languages
error indicators
code completion
call tips

А базовый функционал есть и в стандартном QTextEdit:

QTextEdit is an advanced WYSIWYG viewer/editor supporting rich text formatting using HTML-style tags. It is optimized to handle large documents and to respond quickly to user input.
code folding
margins can contain markers like those used in debuggers to indicate breakpoints and the current line.
recordable macros
multiple views
printing.


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: warlock от Февраль 05, 2010, 17:52
Спасибо огромное. Про существование Qt Demo тоже спасибо)
Про QScintilla почитал - все-таки такой мощи не нужно, я кстати про этот компонент и в книге уже прочитал)

Поскольку я новичек, то мне было очень полезно изучить возможности форматирования текста в QTextEditor, только мне был интересен тот момент, если ли виджет (кнопки + текстовое поле), который можно настраивать (включать/выключать кнопки форматирования текста). Т.е. там создал объект, настроил и т.д.


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: lit-uriy от Февраль 05, 2010, 18:11
>>Т.е. там создал объект, настроил и т.д.
ну вот из демки и возьми исходник.


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: warlock от Февраль 05, 2010, 18:34
Цитировать
ну вот из демки и возьми исходник.
Я уже так и сделал  :)

Вот еще вопрос:
В демке реализация например курсива такая:
Код:
connect(actionTextItalic,SIGNAL(triggered()),SLOT(textItalic()));
...
void WkDiary::textItalic()
{
    QTextCharFormat format;
    format.setFontItalic(actionTextItalic->isChecked());
    mergeFormatOnWordOrSelection(format);
}
void WkDiary::mergeFormatOnWordOrSelection(const QTextCharFormat& format)
{
    QTextCursor cursor = editor->textCursor();
    if(!cursor.hasSelection())
        cursor.select(QTextCursor::WordUnderCursor);
    cursor.mergeCharFormat(format);
    editor->mergeCurrentCharFormat(format);
}
Мне показалось это немного громоздким, и я решил чуть изменить реализацию. Если вызывать слот напрямую с передачей bool
Код:
connect(actionTextItalic,SIGNAL(triggered(bool)),editor,SLOT(setFontItalic(bool)));
editor - объект QTextEdit, то ясное дело что при отсутствии выделения текста, ничего происходить не будет. Подкиньте идейку, или просто скажите что я дурней маюсь, и что все отлично реализовано :)


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: lit-uriy от Февраль 05, 2010, 19:44
>>то ясное дело что при отсутствии выделения текста, ничего происходить не будет
ты для всего редактора устанавливаешь курсив

>>Подкиньте идейку
а какую идейку? По моему всё уже сделано, пользуйся


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: warlock от Февраль 05, 2010, 20:10
Цитировать
ты для всего редактора устанавливаешь курсив
проверил - нет
Цитировать
а какую идейку?
можно ли сделать красивее - вот такую идейку

Хотя лично я никогда без выделения текста, не пользуюсь кнопками форматирования, поэтому имхо лучше использовать слот напрямую.


Название: Re: Text Editor Widget - есть ли готовое решение?
Отправлено: Racheengel от Февраль 10, 2010, 17:40
Готовый редактор на QScintilla: http://ste.sintegrial.com/