为只读QPlainTextEdit设置灰色背景颜色

时间:2014-07-31 12:52:15

标签: c++ qt

现在,只读纯文本编辑具有白色,这并不会使其显示为只读。我需要将我的只读纯文本编辑为“灰色”。但是,灰色表示与其对应的默认系统颜色,而不是硬编码的RGB(127,127,127)。

我不能只禁用小部件的原因是我希望用户能够选择和复制文本。这对于只读编辑框是可行的,但如果它们被禁用则不行。

我想到的屏幕截图示例:

enter image description here

2 个答案:

答案 0 :(得分:4)

很晚才回应,但只是寻找相同的。上面的解决方案非常好用,但我猜以下代码更多qt'isch:

// read-only PlainTextEdit with gray background
QColor mainWindowBgColor = palette().color(QPalette::Window);
// for the current widget
setStyleSheet(QString("QPlainTextEdit[readOnly=\"true\"] { background-color: %0 }").arg(mainWindowBgColor.name(QColor::HexRgb)));

// or application wide do:
qApp->setStyleSheet(QString("QPlainTextEdit[readOnly=\"true\"] { background-color: %0 }").arg(mainWindowBgColor.name(QColor::HexRgb)));

优点是你只需要做一次,但要获得一致的外观和感觉。 请注意在方括号中使用复杂的选择器。缺点是,但上述代码存在同样的问题,更改操作系统设计/配置文件只有在重新执行后才会生效代码(最有可能重新启动你的应用程序)。 - 很遗憾QtDesigner没有提供一种简单的方法 - 或者我还没弄明白该怎么做。

最后,作为具有readOnly属性集的所有元素的应用程序范围的单行:

qApp->setStyleSheet(QString("[readOnly=\"true\"] { background-color: %0 }").arg(qApp->palette().color(QPalette::Window).name(QColor::HexRgb)));

答案 1 :(得分:2)

经过一些谷歌搜索和一些实验后,我发现了如何做到这一点:

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

    QPalette readOnlyPalette = ui->plainTextEdit->palette();
    QColor mainWindowBgColor = palette().color(QPalette::Window);
    readOnlyPalette.setColor(QPalette::Base, mainWindowBgColor);
    ui->plainTextEdit->setPalette(readOnlyPalette);
}