更改QCheckBox指示器矩形颜色

时间:2015-06-07 12:34:37

标签: qt qitemdelegate qcheckbox

我正在尝试仅更改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;
};

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

无需为此创建自定义委托。您可以使用stylesheets根据需要更改复选框或任何其他小部件的颜色。以下样式表将为复选框矩形设置灰色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

答案 1 :(得分:0)

我能够弄清的最简单方法是使用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