0

更新: 私のペイント メソッドは const ではありませんでした

QTableViewに接続されたカスタムがありQAbstractTableModelます。

最近QStyledItemDelegateサブクラスを作成し、そのpaintメソッドがデバッグ メッセージを出力し、親ペイントを呼び出して、別のデバッグ メッセージを出力します。

私は呼び出しview->setItemDelegateて、ビュー内のアイテム デリゲートが指定したものであることを確認しました (念のため)。

ただし、私のプログラムは以前と同じようにレンダリングするだけで、デバッグ メッセージを .xml ファイルに出力することはありません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 メソッドは互いに異なるシグネチャを持つと見なされます)、それがペイント メソッドが呼び出されない理由です。

于 2011-05-01T06:48:58.800 に答える