如何在QLineEdit中更改部分文本的颜色? [英] How can I change color of part of the text in QLineEdit?

查看:2737
本文介绍了如何在QLineEdit中更改部分文本的颜色?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为在QLineEdit中编写的文本添加一些语法高亮,但它不支持富文本格式化,我不能改变QlineEdit为其他东西,所以我应该找到如何设置文本的颜色在这个小部件。 / p>

有办法吗?

解决方案

  static void setLineEditTextFormat(QLineEdit * lineEdit,const QList< QTextLayout :: FormatRange>& formats)
{
if(!lineEdit)
return;

QList< QInputMethodEvent :: Attribute>属性;
foreach(const QTextLayout :: FormatRange& fr,formats)
{
QInputMethodEvent :: AttributeType type = QInputMethodEvent :: TextFormat;
int start = fr.start - lineEdit-> cursorPosition();
int length = fr.length;
QVariant value = fr.format;
attributes.append(QInputMethodEvent :: Attribute(type,start,length,value));
}
QInputMethodEvent事件(QString(),attributes);
QCoreApplication :: sendEvent(lineEdit,& event);
}

static void clearLineEditTextFormat(QLineEdit * lineEdit)
{
setLineEditTextFormat(lineEdit,QList< QTextLayout :: FormatRange>());
}

//用法示例:
QLineEdit * lineEdit = new QLineEdit;
lineEdit-> setText(tr(Task Tracker - Entry));

QList< QTextLayout :: FormatRange>格式;

QTextCharFormat f;

f.setFontWeight(QFont :: Bold);
QTextLayout :: FormatRange fr_task;
fr_task.start = 0;
fr_task.length = 4;
fr_task.format = f;

f.setFontItalic(true);
f.setBackground(Qt :: darkYellow);
f.setForeground(Qt :: white);
QTextLayout :: FormatRange fr_tracker;
fr_tracker.start = 5;
fr_tracker.length = 7;
fr_tracker.format = f;

formats.append(fr_task);
formats.append(fr_tracker);

customizeLineEditText(lineEdit,formats);


I want to add some syntax highlighting to text being written in QLineEdit, but it does not support rich text formatting, I can not change QlineEdit to something else, so I should find how to set color of text in this widget.

Is there a way to do this?

解决方案

Just found a neat trick for that.

static void setLineEditTextFormat(QLineEdit* lineEdit, const QList<QTextLayout::FormatRange>& formats)
{
    if(!lineEdit)
        return;

    QList<QInputMethodEvent::Attribute> attributes;
    foreach(const QTextLayout::FormatRange& fr, formats)
    {
        QInputMethodEvent::AttributeType type = QInputMethodEvent::TextFormat;
        int start = fr.start - lineEdit->cursorPosition();
        int length = fr.length;
        QVariant value = fr.format;
        attributes.append(QInputMethodEvent::Attribute(type, start, length, value));
    }
    QInputMethodEvent event(QString(), attributes);
    QCoreApplication::sendEvent(lineEdit, &event);
}

static void clearLineEditTextFormat(QLineEdit* lineEdit)
{
    setLineEditTextFormat(lineEdit, QList<QTextLayout::FormatRange>());
}

// Usage example:
QLineEdit* lineEdit = new QLineEdit;
lineEdit->setText(tr("Task Tracker - Entry"));

QList<QTextLayout::FormatRange> formats;

QTextCharFormat f;

f.setFontWeight(QFont::Bold);
QTextLayout::FormatRange fr_task;
fr_task.start = 0;
fr_task.length = 4;
fr_task.format = f;

f.setFontItalic(true);
f.setBackground(Qt::darkYellow);
f.setForeground(Qt::white);
QTextLayout::FormatRange fr_tracker;
fr_tracker.start = 5;
fr_tracker.length = 7;
fr_tracker.format = f;

formats.append(fr_task);
formats.append(fr_tracker);

customizeLineEditText(lineEdit, formats);

这篇关于如何在QLineEdit中更改部分文本的颜色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆