样式表可以在QPlainTextEdit中更改文本颜色吗?

时间:2015-08-17 22:17:11

标签: qt qt5 qtstylesheets

我在QPlainTextEdit上使用以下样式表

QPlainTextEdit:focus {
    color:red;
}

但是文字颜色在焦点上没有变化。

但是,如果我使用它:

QPlainTextEdit:focus {
    background-color: red;
}

它有效......

这是整个样式表:

QPlainTextEdit {
    background-color:#3a3a3a;color:#EEE;border:1px;border-style:solid;border-color:#999;
}

QPlainTextEdit:focus {
    background-color:#DDD;color:#111;border:1px;border-style:solid;border-color:#111;
    selection-background-color: #2222FF; selection-color:white;
}

当我点击QPlainTextEdit时,它会将其背景颜色(正确地)从3a3a3a更改为#DDD但是,它并没有'将其文本颜色从#EEE更改为#111。

2 个答案:

答案 0 :(得分:2)

我已经为您的问题找到了解决方案并使用QPlainTextEdit。它也适用于QTextEdit小部件。

我们的想法是为eventFilter安装QPlainTextEdit,并检查它是否正在接收焦点。根据具体情况,您可以设置所需的样式。

我将使用一些代码来解释自己:

mainwindow.h(我们在ui文件中有一个QPlainTextEdit)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtWidgets>

#include "ui_mainwindow.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow();

    Ui::MainWindow ui;

private:
    bool eventFilter(QObject * object, QEvent * event);
};

#endif

<强> mainwindow.cpp

#include <QtWidgets>

#include "mainwindow.h"

MainWindow::MainWindow()
{
    ui.setupUi(this);
    ui.plainTextEdit->installEventFilter(this);
}

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
    if (object == ui.plainTextEdit)
    {
        if (event->type() == QEvent::FocusOut)
        {
            ui.plainTextEdit->setStyleSheet("color: white; background-color: black;");
        } else if (event->type() == QEvent::FocusIn) {
            ui.plainTextEdit->setStyleSheet("color: red; background-color: white;");
        }
        return false;
    }    
    return false;
}

答案 1 :(得分:0)

鉴于QPlainTextEdit显示有点违反直觉的富文本,因此没有单一的文字颜色可供使用。 QTextDocument是文本颜色信息的来源,您可以在文档中使用多种颜色。

setPlainText()是一种便捷方法,它使用纯文本为其创建QTextDocument富文本表示。

QPlainTextEdit基本上不可能使用样式的color属性,因为没有单一的文本颜色可供更改。