绘制QStyleOptionButton QStyle::CE_CheckBox背景的方法是什么

what is the way to draw QStyleOptionButton QStyle::CE_CheckBox background?

本文关键字:背景 方法 是什么 CheckBox QStyleOptionButton QStyle CE 绘制      更新时间:2023-10-16

我正在尝试获取父背景并将其设置为复选框背景颜色。我有一种让复选框昏昏欲睡的绘画方法:

void paint( QPainter* painter,
            const QStyleOptionViewItem& option,
            const QModelIndex &index) const
{
    // Get item data
    bool value = index.data(Qt::UserRole).toBool();
    QString text = index.data(Qt::DisplayRole).toString();
    // Fill style options with item data
    const QStyle *style = QApplication::style();
    QStyleOptionButton opt;
    opt.state |= value ? QStyle::State_On : QStyle::State_Off;
    opt.state |= QStyle::State_Enabled;
    opt.text = text;
    opt.rect = option.rect;
    // Draw item data as CheckBox
    style->drawControl(QStyle::CE_CheckBox,&opt,painter);
}

但是如何设置此复选框的背景色?

painter->fillRect(rect, color);

您可以在drawControl:之前添加代码

if (option.state & QStyle::State_Selected && option.state & QStyle::State_Active)
    painter->fillRect(option.rect, option.palette.highlight());
else if (option.state & QStyle::State_Selected)
    painter->fillRect(option.rect, option.palette.background());

更新:

您可以尝试从小部件初始化QStyleOptionButton,这样您就可以获得小部件的调色板。

QStyleOptionButton opt;
opt.initFrom(this);

旧建议:

更改opt.backgroundBrush可能有效:

opt.backgroundBrush = QBrush(QColor(0, 0, 0, 102));

或设置opt.backgroundColor