gpt4 book ai didi

c++ - 无法在 QStyledItemDelegate 中绘制复选框

转载 作者:太空宇宙 更新时间:2023-11-04 14:09:41 26 4
gpt4 key购买 nike

我有一个 QStyledItemDelegate 派生对象用于 QTableView 派生 View 。我根据模型索引数据类型进一步委托(delegate)绘画和编辑器创建。对于 bool,我想通过复选框表示状态 - 但复选框从未出现。

这是基本委托(delegate)绘制函数:

void Sy_QtPropertyDelegate::paint( QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index ) const
{
painter->save();

if ( index.column() == 0 ) {
...
} else {
QVariant var = index.data();
bool modified = index.data( Sy_QtPropertyModel::ModifiedRole ).toBool();

// If the data type is one of our delegates, then push the work onto
// that.
auto it = delegateMap_.find( var.type() );
if ( it != delegateMap_.end() ) {
( *it )->paint( painter, option, index );
} else if ( var.type() != QVariant::UserType ) {
...
} else {
...
}
}

painter->restore();
}

bool 子委托(delegate)绘制函数:

void Sy_boolPD::paint( QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index ) const
{
painter->save();

bool checked = index.data().toBool();
bool modified = index.data( Sy_QtPropertyModel::ModifiedRole ).toBool();

QStyle* style = Sy_application::style();
if ( modified ) {
QStyleOptionViewItemV4 bgOpt( option );
bgOpt.backgroundBrush = QBrush( Sy_QtPropertyDelegate::ModifiedColour );
style->drawControl( QStyle::CE_ItemViewItem, &bgOpt, painter );
}

QStyleOption butOpt( option );
butOpt.state = QStyle::State_Enabled;
butOpt.state |= checked ? QStyle::State_On : QStyle::State_Off;
style->drawControl( QStyle::CE_CheckBox, &butOpt, painter );

painter->restore();
}

如果我强制 modified 为真,则表格的背景颜色会适当更改,并且 couting butOptrectstate 成员显示它们是正确的 - 但没有显示复选框!将 QStyle::CE_CheckBox 设置为任何其他类型也不会导致任何渲染。

我经常使用 Qt 的 MVC 框架,但我看不出哪里出了问题。

最佳答案

我所要做的就是查看源代码...

case CE_CheckBox:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(option)) {
...
}

我传递给该方法的 QStyleOption 被转换为特定于绘制控件的类型,CE_CheckBox 需要一个 QStyleOptionButton,如果cast 失败绘图操作静默跳过。

关于c++ - 无法在 QStyledItemDelegate 中绘制复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com