Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QLineEdit中更改部分文本的颜色?_C++_Qt_User Interface - Fatal编程技术网

C++ 如何在QLineEdit中更改部分文本的颜色?

C++ 如何在QLineEdit中更改部分文本的颜色?,c++,qt,user-interface,C++,Qt,User Interface,我想在QLineEdit中编写的文本中添加一些语法高亮显示,但它不支持富文本格式,我无法将QLineEdit更改为其他格式,因此我应该在这个小部件中找到如何设置文本颜色的方法 有没有办法做到这一点?您可以使用更改颜色 你可能想考虑使用 QTextBrowser 。对于这个例子, < P>只是找到了一个巧妙的窍门。 static void setLineEditTextFormat(QLineEdit* lineEdit, const QList<QTextLayout::FormatRan

我想在QLineEdit中编写的文本中添加一些语法高亮显示,但它不支持富文本格式,我无法将QLineEdit更改为其他格式,因此我应该在这个小部件中找到如何设置文本颜色的方法


有没有办法做到这一点?

您可以使用更改颜色


你可能想考虑使用<代码> 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;");