Closed DikBSD closed 5 years ago
То есть, в редакторе сделана кнопка для вставки горизонтальной линии, я правильно понял?
Сделана и кнопка, и сама вставка горизонтальной линии. Написан код, создающий кнопку, экшен для него. Написан код, внедряющий новую кнопку в конфиг get_parameter_table_14(). Написан код для shortcutManager. Написан код вставки горизонтальной линии в позицию курсора, учитывающий наличие "мягкого переноса" слева от места вставки, и заменящий этотмягкий перенос, если он есть, на простой абзац. Иначе вставка горизонтальной линии будет некорректной.
Вадим, я принял этот Pull-реквест, но обращаю внимание, что:
Требуется доработка, так как обнаружено, что при нажатии Enter на строке с линией, появляется новая строка с линией, а не пустая строка.
Скорее всего здесь требуется доработка не в самой вставке горизонтальной линии, а в обработчике EditorTextArea::keyPressEvent(QKeyEvent *event)
, потому что за результат нажатия Enter на каком-то абзаце отвечает QTextEdit
.
По-видимому, по Enter QTextEdit
ген6ерирует абзац со свойствами (но не содержимым) абзаца, на котором стоит курсор.:
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
<hr>
. Если <hr>
обрамить кодом пустого абзаца, т.е. <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><hr></p>
, то он преобразуется в код пустого абзаца с потерей горизонтальной линии: <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
Поэтому, скорее всего, QTextEdit
берет свойства курсорного абзаца для генерации нового пустого абзаца по нажатию Enter
. А на абзаце <hr>
нет свойств. Возможно, он поэтому и копирует <hr>
.
Попробую доработать именно этот обработчик EditorTextArea::keyPressEvent
, чтобы отлавливать в нем нажатие Enter
и генерировать вставляемый "пустой" абзац, который будет отличаться от того, на котором стоит курсор (в данном случае - <hr>
), а - чистый "пустой" абзац.
Сделана вставка горизонтальной линии в "пустой" абзац, где расположен курсор (пустой абзац заменяется горизонтальной линией). Если в тексте есть выделение, или же курсор находится в тексте, то вставка горизонтальной линии не производится. То есть, чтобы вставить горизонтальную линию, надо установить курсор либо в "пустой" абзац , либо - в абзац - "мягкий перенос" (
<br/>
).