更新: 私のペイント メソッドは const ではありませんでした
QTableView
に接続されたカスタムがありQAbstractTableModel
ます。
最近QStyledItemDelegate
サブクラスを作成し、そのpaint
メソッドがデバッグ メッセージを出力し、親ペイントを呼び出して、別のデバッグ メッセージを出力します。
私は呼び出しview->setItemDelegate
て、ビュー内のアイテム デリゲートが指定したものであることを確認しました (念のため)。
ただし、私のプログラムは以前と同じようにレンダリングするだけで、デバッグ メッセージを .xml ファイルに出力することはありませんpaint
。デリゲートのコンストラクターでデバッグ メッセージを出力するので、その関数が呼び出された場合に出力する必要があることがわかります。
これが私のコードの簡素化されたバージョンです。次のいずれかをお知らせください。
- 何が悪いのか分かりますか?
- このような Qt クラスをデバッグするにはどうすればよいですか?
- この問題を診断するために投稿する必要がある他の関連コードは何ですか?
- 私が試すことができる一般的な解決策はありますか?
ありがとう!
デリゲート .h および .cpp ファイル全体 (インクルード/名前空間を除く) は次のとおりです。
class QtCellItemDelegate : public QStyledItemDelegate
{
Q_OBJECT;
public:
QtCellItemDelegate( QWidget *parent = NULL );
void paint( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index );
QSize sizeHint( const QStyleOptionViewItem &option,
const QModelIndex & index ) const;
virtual ~QtCellItemDelegate();
};
QtCellItemDelegate::QtCellItemDelegate( QWidget *parent ) :
QStyledItemDelegate( parent )
{
qDebug() << "CONSTRUCT";
}
void QtCellItemDelegate::paint( QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index )
{
painter->save();
qDebug() << "Begin Paint";
QStyledItemDelegate::paint( painter, option, index );
qDebug() << " Begin custom paint";
// omitted...
qDebug() << "End paint";
painter->restore();
}
QSize QtCellItemDelegate::sizeHint( const QStyleOptionViewItem &option,
const QModelIndex & index ) const
{
return QSize( 60, 60 );
}
QtCellItemDelegate::~QtCellItemDelegate()
{
qDebug() << "Destroy delegate!";
}
したがって、デバッグ出力は、コンストラクターが呼び出されていることを示しています (ただし、デストラクタは呼び出されていません...)。ただし、メッセージはpaint
印刷されません。