更改 QCheckBox 指示器矩形颜色
Posted
技术标签:
【中文标题】更改 QCheckBox 指示器矩形颜色【英文标题】:Changing QCheckBox indicator rectangle color 【发布时间】:2015-06-07 12:34:37 【问题描述】:我正在尝试仅更改 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;
;
有什么建议吗?
【问题讨论】:
【参考方案1】:无需为此创建自定义委托。您可以使用stylesheets 来根据需要更改复选框或任何其他小部件的颜色。下面的样式表将为复选框矩形设置一个灰色的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
【讨论】:
这种方法的问题是它改变了复选框的整个外观,而不仅仅是按要求改变了边框颜色。在 Qt 元素上设置自定义样式表时,您需要为元素的每个部分提供样式。 可悲的是与上述相同的问题。我将禁用的 qcheckbox 背景设置为灰色,但我不再看到复选框的其余部分 - 主要是勾号。我该如何设计刻度? QRadioButton 也是如此。更改样式使单选按钮变为正方形:-(有什么想法可以在哪里找到有关这些按钮样式的信息? 现在面临同样的问题...这方面有进展吗? 同样的问题:设置指示器大小有效,但是当我尝试设置边框颜色时,选中状态看起来像未选中 当我在我的复选框上看不到任何指示符时,如何获得投票!【参考方案2】:我能想到的最简单的方法是使用 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
【讨论】:
【参考方案3】:@pnezis 的解决方案有勾号不再显示的问题。
我通过创建一个自定义小部件来解决此问题,在其中我将一个 QCheckBox(不带标签)和一个 QLabel 放在一起。
然后,在 QCheckBox 上,我调用
checkBox.setStyleSheet('background-color: rgba(255, 90, 90, 0.7);')
这会改变 QCheckBox 的颜色但仍显示刻度。
【讨论】:
以上是关于更改 QCheckBox 指示器矩形颜色的主要内容,如果未能解决你的问题,请参考以下文章
在NavigationView中更新SelectionIndicator的颜色
如何自定义单个选项卡? (更改背景颜色、指示器颜色和文本颜色)