Обновление: мой метод рисования не был постоянным
У меня есть пользовательский QTableView
, подключенный к QAbstractTableModel
.
Я недавно создал подкласс QStyledItemDelegate
, и его метод paint
печатает сообщение отладки, а затем вызывает родительскую краску и затем печатает другое сообщение отладки.
Я позвонил view->setItemDelegate
и проверил, что делегат предмета, на мой взгляд, тот, который я ему дал (просто чтобы быть уверенным).
Однако, моя программа просто воспроизводит вещи так же, как и раньше, и никогда не печатает отладочное сообщение в paint
. Он печатает отладочное сообщение в конструкторе делегата, поэтому я знаю, что оно должно печататься, если эта функция когда-либо будет вызвана.
Вот урезанная версия моего кода, дайте мне знать один из них:
- Вы видите, что не так?
- Как я могу отлаживать классы Qt следующим образом?
- Какой другой соответствующий код я должен опубликовать для диагностики этой проблемы?
- Есть ли какое-то общее решение, которое я мог бы попробовать?
Спасибо!
Вот все файлы делегатов .h и .cpp (минус включает / namespace)
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
никогда не печатаются.