0

更新:我的绘画方法不是 const

我有一个QTableView连接到QAbstractTableModel.

我最近创建了一个QStyledItemDelegate子类,它的paint方法会打印一条调试消息,然后它会调用父类paint,然后它会打印另一条调试消息。

我已经打过电话view->setItemDelegate,并检查了我视图中的项目委托是我给它的(只是为了确定)。

但是,我的程序只是以与以前相同的方式呈现事物,并且从不在paint. 它确实在委托的构造函数中打印了一条调试消息,所以我知道如果该函数被调用,它应该打印。

这是我的代码的精简版本,让我知道其中一个:

  1. 你能看出有什么问题吗?
  2. 我如何调试这样的 Qt 类?
  3. 我应该发布哪些其他相关代码来诊断这个问题?
  4. 我可以尝试一些常见的解决方案吗?

谢谢!

这是整个委托 .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永远不会被打印出来。

4

1 回答 1

2

我认为您的问题是您没有将子类的绘制方法声明为 const。因此,它不会覆盖超类方法(const 和非 const 方法被认为具有彼此不同的签名),这就是为什么不调用您的 paint 方法的原因。

于 2011-05-01T06:48:58.800 回答