派生ビューのQStyledItemDelegate
派生オブジェクトがありQTableView
ます。さらに、モデルインデックスのデータ型に応じて、ペイントとエディターの作成を委任します。■bool
チェックボックスを使用して状態を表現したかったのですが、チェックボックスが表示されません。
基本デリゲートペイント関数は次のとおりです。
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
サブデリゲートペイント機能:
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
にtrueにすると、背景はテーブルの色が適切に変更され、ingcout
とメンバーはそれらが正しいことを示しますが、チェックボックスは表示されません。他のタイプに設定しても、何もレンダリングされません。butOpt
rect
state
QStyle::CE_CheckBox
私はQtのMVCフレームワークを頻繁に使用しましたが、ここでどこが間違っているのかわかりません。