2

我正在尝试仅更改QCheckBox指示器矩形的颜色。

目前我成功绘制了矩形的右边和底线。可能我在这里做错了什么。

这是我的代码:

CheckBoxWidget.cpp

CheckBoxWidget::CheckBoxWidget(QObject *poParent)
    : QItemDelegate(poParent)
{
}

void CheckBoxWidget::drawCheck( QPainter *painter,
                                const QStyleOptionViewItem &option,
                                const QRect & rect,
                                Qt::CheckState state) const
{
    QRect oCheckBoxRect =
            QApplication::style()->subElementRect( QStyle::SE_CheckBoxIndicator, &option);

    painter->setPen(Qt::white);
    painter->drawRect(oCheckBoxRect);

    QItemDelegate::drawCheck(painter, option, oCheckBoxRect, state);
}

CheckBoxWidget.h

class CheckBoxWidget : public QItemDelegate
{
    Q_OBJECT

public:
    CheckBoxWidget(QObject *poParent = 0);
    virtual ~CheckBoxWidget();

protected:
    virtual void drawCheck( QPainter *painter,
                            const QStyleOptionViewItem &option,
                            const QRect &,
                            Qt::CheckState state) const;
};

有什么建议么 ?

4

3 回答 3

5

无需为此创建自定义委托。您可以使用样式表来根据需要更改复选框或任何其他小部件的颜色。以下样式表将为3px复选框矩形设置灰色边框。

QCheckBox::indicator {
    border: 3px solid #5A5A5A;
    background: none;
}

为了设置样式表,您可以使用Qt DesignersetStylesheet函数。

为了设置特定的颜色,以下所有内容均有效:

border: 3px solid #5A5A5A;
border: 3px solid red;
border: 3px solid rgb(255, 120, 100);
border: 3px solid rgba(255,120,100, 50); // For alpha transparency
于 2015-06-07T12:55:37.770 回答
1

我能想到的最简单的方法是使用 QApplication 调色板来帮助更改复选框指示器的颜色。这使得您不必使用 QStyle 覆盖整个复选框小部件的所有状态。

这是我需要的代码类型

QPalette newPallete = myWidget->palette();
newPallete.setColor(QPalette::Active, QPalette::Background, myWidget->palette().text())
myWidget->setPalette(newPallete)

请参阅与样式按钮非常相似的其他示例: Qt5 - setting background color to QPushButton and QCheckBox

于 2019-03-29T19:59:27.107 回答
0

@pnezis 的解决方案的问题是不再显示刻度线。

我通过创建一个自定义小部件来解决这个问题,在其中我将一个 QCheckBox(没有标签)和一个 QLabel 放在一起。

然后,在 QCheckBox 上,我调用

checkBox.setStyleSheet('background-color: rgba(255, 90, 90, 0.7);')

这会更改 QCheckBox 的颜色,但仍显示刻度。

于 2021-09-09T12:56:56.647 回答