【问题标题】:Changing QCheckBox indicator rectangle color更改 QCheckBox 指示器矩形颜色
【发布时间】: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;
};

有什么建议吗?

【问题讨论】:

    标签: qt qitemdelegate qcheckbox


    【解决方案1】:

    无需为此创建自定义委托。您可以使用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
    

    【讨论】:

    • 这种方法的问题是它改变了复选框的整个外观,而不仅仅是按要求改变了边框颜色。在 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 的颜色但仍显示刻度。

      【讨论】:

        猜你喜欢
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-21
        • 2012-04-17
        相关资源
        最近更新 更多