QTextEdit::setPalette 未更新文本颜色

QTextEdit::setPalette is not updating the text color

我正在更改两个 QTextEdit 小部件的文本颜色以及许多其他 QLineEdits。每当我禁用或启用只读 属性 以使其在视觉上更好时,就会发生这种情况。

QPalette* disablePallete;
QPalette* enabledPallete;
disablePallete->setColor(QPalette::Text,Qt::darkGray);
enabledPallete->setColor(QPalette::Text,Qt::black);

// disable writing
ui->TextEdit->setPalette(*disablePallete);
// enable writing
ui->TextEdit->setPalette(*enablePallete);

在我更改调色板的那一刻,这对我所有的 LineEdits 都非常有效。

我的问题是 QTextEdits 中的文本不会立即更新,只有在我单击框内的内容或编辑文本时才会更新。它也有故障,只更新光标移动到的位置。

这里有一个例子。

我每次都这样做来绕过它。它会强制重绘所有内容。

ui->roomDescriptionTextEdit->append("");
ui->roomDescriptionTextEdit->undo();

尽管这可行,但我想要一种更简单的方法来更新 QTextEdit 上的所有文本颜色。

有人知道解决方案吗?

我在表单上只有 QTextEdit 和 QPushbutton,它对我来说工作正常。如果您找不到错误,请提供完整代码。

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(_handleClicked(bool)));
}


void MainWindow::_handleClicked(bool ok)
{
    QPalette palette;
    palette.setColor(QPalette::Text,Qt::darkGray);
    ui->textEdit->setPalette(palette);
}

MainWindow::~MainWindow()
{
    delete ui;
}

QTextEdit 可以处理富文本,而 QTextDocument 可以控制它。现在 QTextEdit 的属性可以控制没有设置富文本 属性 的文本。如果文本的某些部分设置了 属性(颜色、粗体、字体...),这会覆盖 QTextEdit.

中的默认值

很可能您已将富文本粘贴到文本编辑中或执行了一些设置富文本值的编辑。