c++ 如何绘制QStyle::CE_CheckBox背景?

mzillmmw  于 2022-12-05  发布在  其他
关注(0)|答案(3)|浏览(271)

我尝试获取父背景并将其设置为复选框的背景颜色。我有这样的绘制方法来绘制复选框:

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);
}

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

mf98qq94

mf98qq941#

painter->fillRect(rect, color);
wz8daaqr

wz8daaqr2#

您可以在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());
2nbm6dog

2nbm6dog3#

更新日期:

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

QStyleOptionButton opt;
opt.initFrom(this);

旧建议:

更改backgroundBrush选项可能有效:

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

或设置选项backgroundColor

相关问题