改变 QCheckBox 的文本颜色

3
我在那里找到了相同的问题: 如何在Qt中更改QCheckBox文本标签颜色? 但不幸的是,在我的Mac上,它们都不能正常工作。
在Linux和Windows上,默认情况下,QWidget(QLabel、QCheckBox、QRadioButton)的文本是白色的。但在Mac上,它是黑色的。不幸的是,由于文本不可读(我有黑色背景),这会导致我的屏幕出现问题。
我已经派生了QCheckBox类,因此在构造函数中,您可以得到:
class MPUBLIC MythCheckBox: public QCheckBox
{
    Q_OBJECT

  public:
    MythCheckBox(QWidget *parent = 0, const char *name = "MythCheckBox")
        : QCheckBox(parent)
    {
        setObjectName(name);
#ifdef Q_OS_MAC
//        setStyleSheet("QCheckBox { color : white; }; QCheckBox::indicator { color:black; }");
        QPalette p = palette();
        p.setColor(QPalette::WindowText, Qt::white);
        setPalette(p);
#endif
    };

如果我使用样式表,例如:
setStyleSheet("QCheckBox { color : white; }; QCheckBox::indicator { color:black; }");

然后,我的文本就像我想要的那样变成了白色,但是复选框本身变得不可见...
如果我使用第二种方法:
QPalette p = palette();
p.setColor(QPalette::WindowText, Qt::white);
setPalette(p);

复选框的文本会变为白色,复选框本身的对勾仍然是黑色的,看起来它可以正常工作。但是如果我将焦点移动到QCheckBox上,文本就会再次变成黑色,并且将永远保持黑色。 我也尝试过:
QPalette p = palette();
p.setColor(QPalette::Active, QPalette::WindowText, Qt::white);
p.setColor(QPalette::Inactive, QPalette::WindowText, Qt::white);
setPalette(p);

请注意,我在 Mac 上才会出现这种奇怪的行为;如果我在 Linux 上尝试相同的代码(使用不同的颜色,如红色),那么一切都会表现得像我想要的。

有没有办法只更改 QCheckBox 的文本颜色而不更改其他内容呢?


你可以尝试指定小部件的哪一部分需要通过新的样式表进行修改。例如,如果你的复选框名称是 MythCheckBox_0,你可以调用 MythCheckBox_0.setStyleSheet("#MythCheckBox_0{color : white;}"); 或类似的方式来实现。 - Ilya
尝试像您使用样式表一样操作,但不要重新定义QCheckBox :: indicator的CSS,可以使用以下代码:setStyleSheet("QCheckBox { color : white; }); - Rud Limaverde
你手头有QDesigner吗?如果我在调色板颜色方面遇到问题,我会使用它来简单地玩弄颜色,看看是否解决了我的问题。 - Bowdzone
我不使用QDesigner,一切都是编码完成的。Rud Limaverde:当我这样做(重新定义整个QCheckBox的颜色)时,复选框会变成白色(例如,您再也看不到它了)... - jyavenard
1个回答

1

对于一些小部件,您需要禁用本地外观。例如QPushButton(http://doc.qt.io/qt-4.8/stylesheet-reference.html)。因此,对于复选框,您可以尝试设置边框。这样复选框的样式看起来像:

QCheckBox {
   border: none;
   color: white;
}

对我来说没问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接