C++ 如何在QLineEdit中更改部分文本的颜色?
我想在QLineEdit中编写的文本中添加一些语法高亮显示,但它不支持富文本格式,我无法将QLineEdit更改为其他格式,因此我应该在这个小部件中找到如何设置文本颜色的方法C++ 如何在QLineEdit中更改部分文本的颜色?,c++,qt,user-interface,C++,Qt,User Interface,我想在QLineEdit中编写的文本中添加一些语法高亮显示,但它不支持富文本格式,我无法将QLineEdit更改为其他格式,因此我应该在这个小部件中找到如何设置文本颜色的方法 有没有办法做到这一点?您可以使用更改颜色 你可能想考虑使用 QTextBrowser 。对于这个例子, < P>只是找到了一个巧妙的窍门。 static void setLineEditTextFormat(QLineEdit* lineEdit, const QList<QTextLayout::FormatRan
有没有办法做到这一点?您可以使用更改颜色
你可能想考虑使用<代码> QTextBrowser <代码>。对于这个例子,
< P>只是找到了一个巧妙的窍门。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);
setLineEditTextFormat(lineEdit, formats);
静态无效setLineEditTextFormat(QLineEdit*lineEdit,常量QList&formats)
{
如果(!lineEdit)
返回;
QList属性;
foreach(常量QTextLayout::FormatRange和fr,格式)
{
QInputMethodEvent::AttributeType=QInputMethodEvent::TextFormat;
int start=fr.start-lineEdit->cursorPosition();
int length=fr.length;
QVariant值=fr.format;
append(QInputMethodEvent::Attribute(类型、开始、长度、值));
}
QInputMethodEvent事件(QString(),属性);
QCoreApplication::sendEvent(行编辑和事件);
}
静态无效clearLineEditTextFormat(QLineEdit*lineEdit)
{
setLineEditTextFormat(lineEdit,QList());
}
//用法示例:
QLineEdit*lineEdit=新的QLineEdit;
lineEdit->setText(tr(“任务跟踪器-条目”);
QList格式;
qtextcharf格式;
f、 setFontWeight(QFont::粗体);
QTextLayout::FormatRange fr_任务;
fr_task.start=0;
fr_task.length=4;
fr_task.format=f;
f、 setFontItalic(真);
f、 立根背景(Qt::darkYellow);
f、 设置前景(Qt::白色);
QTextLayout::FormatRange fr_跟踪器;
fr_tracker.start=5;
fr_.length=7;
fr_tracker.format=f;
格式.append(fr_任务);
格式.append(fr_tracker);
setLineEditTextFormat(lineEdit,formats);
您可以像这样更改文本的颜色:
QLineEdit *line = new QLineEdit();
line->setText("this is a test");
line->setStyleSheet("foreground-color: blue;");
如果不起作用,请将最后一行替换为以下内容:
line->setStyleSheet("color: blue;");
很遗憾,他们没有为此提供本机应用程序,这是一种类似于
QTextEdit
的单行程序。Summerfield在他的PyQt书中,展示了如何在第13章中使用QTextEdit
作为基类制作一个。我们不需要使用“color:blue;”
(FWIW使用PySide)
line->setStyleSheet("color: blue;");