Частично нашел решение данного вопроса.
Файл .h
C++ (Qt)
class QMyTextEdit : public QTextEdit
{
public:
QMyTextEdit(QWidget *parent = nullptr);
void drawDoubleLine(int startPos, int endPos);
private:
QTextCursor cursor;
QVector <int> startX;
QVector <int> endX;
QVector <int> y;
protected:
void paintEvent(QPaintEvent * event);
};
Файл .cpp
C++ (Qt)
QMyTextEdit::QMyTextEdit(QWidget *parent) :
QTextEdit(parent)
{
cursor = textCursor();
}
void QMyTextEdit::drawDoubleLine(int startPos, int endPos)
{
cursor.setPosition(startPos, QTextCursor::MoveAnchor);
QRect r = cursorRect(cursor);
startX << r.x();
cursor.setPosition(endPos, QTextCursor::KeepAnchor);
y << r.bottom();
QFontMetrics fm(cursor.charFormat().font());
endX << r.x() + fm.width(cursor.selectedText());
viewport()->repaint();
}
void QMyTextEdit::paintEvent(QPaintEvent *event)
{
QPainter painter(viewport());
QPen pen;
pen.setColor(cursor.charFormat().foreground().color());
pen.setWidth(1);
painter.setPen(pen);
int xLine1, xLine2, yLine;
if(!startX.isEmpty())
{
for(int i = 0; i < startX.count(); i++)
{
xLine1 = startX[i];
xLine2 = endX[i];
yLine = y[i];
painter.drawLine(xLine1, yLine, xLine2, yLine);
painter.drawLine(xLine1, yLine + 2, xLine2, yLine + 2);
}
}
QTextEdit::paintEvent(event);
}
Код самый простейший и написан на скорую руку, но может кому пригодится. Естественно, при сохранении текста в формате html в конечном тексте никакого двойного подчеркивания не будет, но думаю, можно реализовать и это