更改QCheckBox指示器矩形颜色

Sim*_*mon 2 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);
}
Run Code Online (Sandbox Code Playgroud)

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;
};
Run Code Online (Sandbox Code Playgroud)

有什么建议 ?

pne*_*zis 6

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

QCheckBox::indicator {
    border: 3px solid #5A5A5A;
    background: none;
}
Run Code Online (Sandbox Code Playgroud)

要设置样式表,您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 当我在复选框上看不到任何指示符时,这怎么会得到赞成! (4认同)
  • 这种方法的问题在于它改变了复选框的整个外观,而不仅仅是按要求更改边框颜色。在 Qt 元素上设置自定义样式表时,您需要为元素的每个部分提供样式。 (2认同)
  • 可悲的是同上面的问题.我将我的disabeld qcheckbox背景设置为灰色但我不再看到其余的复选框 - 主要是勾选.我怎样才能打勾?QRadioButton也是如此.改变风格使单选按钮方块: - (任何想法在哪里找到关于造型这些按钮的信息? (2认同)