改变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;
};

有什么建议吗

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

我对这个问题的解决方案是改变QCheckBox::indicatorborder-color,然后通过使QCheckBox::indicator:checkedbackground-color作为标记标记的视觉替代来修复消失的标记。

checkBox.setStyleSheet("
    QCheckBox::indicator { border: 1px solid; border-color: yellow; }
    QCheckBox::indicator:checked { background-color: green; }
");

更多QCheckBox::indicator:<state>可以在这里找到

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

这是我需要的代码类型

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

看另一个与样式按钮非常相似的例子:Qt5 -设置背景色为QPushButton和QCheckBox

@pnezis的解决方案存在标记不再显示的问题。

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

然后,在QCheckBox上,我调用
checkBox.setStyleSheet('background-color: rgba(255, 90, 90, 0.7);')

改变QCheckBox的颜色,但仍然显示勾号。

相关内容

  • 没有找到相关文章

最新更新