Unsigned char data[1920];QTextEdit *textEdit = new QTextEdit();...for(int i=0; i<1920, i++) { setColor(<цвет>); textEdit->insertAt(data[i], 0, i); }
QFontMetrics font_metrics(option.font); QTextDocument text_doc.setHtml(text); QTextLayout textLayout(text_doc.toPlainText()); int leading = font_metrics.leading(); int height = 0; qreal widthUsed = 0; textLayout.beginLayout(); while (1) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(rect.width()); height += leading; line.setPosition(QPoint(0, height)); height += line.height(); widthUsed = qMax(widthUsed, line.naturalTextWidth()); } textLayout.endLayout(); QTextCharFormat ch_format;//формат отображения выделенной подстроки QVector<QTextLayout::FormatRange> formats_str; QTextLayout::FormatRange format_common; format_common.start = 0; format_common.length = text.length(); if (option.state & QStyle::State_Selected && option.state & QStyle::State_Active) { ch_format.setForeground(Qt::white); } else { ch_format.setForeground((Qt::black)); } format_common.format = ch_format; formats_str.append(format_common); //в цикле проходим все подстроки в строкt поиска QString string_of_filter = filter_string->text(); QStringList filtr_sub_strings = string_of_filter.split(" ",QString::SkipEmptyParts); for (int i = 0; i < filtr_sub_strings.size(); i++) { //определяем количество вхождений текущей подстроки if (text.count(filtr_sub_strings.at(i),Qt::CaseInsensitive)>0) { QTextLayout::FormatRange format_sub_string; ch_format.setBackground(QBrush(Qt::lightGray)); ch_format.setForeground(QBrush(Qt::black)); format_sub_string.format = ch_format; int start_sub_string = text.indexOf(filtr_sub_strings.at(i),0,Qt::CaseInsensitive); while (start_sub_string != -1) { format_sub_string.start = start_sub_string; format_sub_string.length = filtr_sub_strings.at(i).length(); formats_str.append(format_sub_string); //ищем следующее вхождение start_sub_string = text.indexOf(filtr_sub_strings.at(i),format_sub_string.start+1,Qt::CaseInsensitive); } } } QTextOption opt; opt.setAlignment(Qt::AlignTop | Qt::AlignLeft); textLayout.setTextOption(opt); textLayout.draw(painter,QPointF(rect.x() + 5,rect.y()),formats_str,(QRectF)rect);
<font color="#blue">data[0]</font><font color="#red">data[1]</font>...