Russian Qt Forum
Апрель 20, 2024, 12:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Двойное подчеркивание текста в QTextEdit  (Прочитано 3050 раз)
heremummortis
Новичок

Offline Offline

Сообщений: 4


Просмотр профиля
« : Ноябрь 19, 2018, 13:14 »

Здравствуйте. Скажите, возможно ли реализовать двойное подчеркивание текста в QTextEdit?
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #1 : Ноябрь 20, 2018, 13:09 »

Если очень сильно захотеть, то возможно Улыбающийся. Но сейчас QTextEdit поддерживает ограниченный набор возможностей HTML (Supported HTML Subset). Среди них я двойного подчёркивания не заметил.
Записан

Пока сам не сделаешь...
heremummortis
Новичок

Offline Offline

Сообщений: 4


Просмотр профиля
« Ответ #2 : Декабрь 04, 2018, 21:03 »

Частично нашел решение данного вопроса.

Файл .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 в конечном тексте никакого двойного подчеркивания не будет, но думаю, можно реализовать и это
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.122 секунд. Запросов: 22.