我只想改变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 Designer
或setStylesheet
函数。
为了设置一个特定的颜色,以下所有内容都是有效的:
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::indicator
的border-color
,然后通过使QCheckBox::indicator:checked
的background-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的颜色,但仍然显示勾号。