更新:我的绘画方法不是 const
我有一个QTableView
连接到QAbstractTableModel
.
我最近创建了一个QStyledItemDelegate
子类,它的paint
方法会打印一条调试消息,然后它会调用父类paint,然后它会打印另一条调试消息。
我已经打过电话view->setItemDelegate
,并检查了我视图中的项目委托是我给它的(只是为了确定)。
但是,我的程序只是以与以前相同的方式呈现事物,并且从不在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
永远不会被打印出来。