簡體   English   中英

Qt 子類 QStyledItemDelegate 繪制方法永遠不會被調用

[英]Qt subclassed QStyledItemDelegate paint method is never called

更新:我的繪畫方法不是 const

我有一個連接到QAbstractTableModel的自定義QTableView

我最近創建了一個QStyledItemDelegate子類,它的paint方法打印一條調試消息,然后它調用父繪制,然后它打印另一條調試消息。

我已經調用了view->setItemDelegate並且我檢查了我視圖中的項目委托是我給它的那個(只是為了確定)。

但是,我的程序只是以與以前相同的方式呈現事物,並且從未在paint中打印調試消息。 它確實在委托的構造函數中打印了一條調試消息,所以我知道如果 function 曾經被調用,它應該打印。

這是我的代碼的精簡版本,讓我知道其中一個:

  1. 你能看出有什么問題嗎?
  2. 我怎樣才能像這樣調試 Qt 類?
  3. 我應該發布哪些其他相關代碼來診斷這個問題?
  4. 我可以嘗試一些常見的解決方案嗎?

謝謝!

這是整個 delegate.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!";
}

所以調試 output 告訴我構造函數被調用(但不是析構函數......)並且我實際上正在為視圖設置相同的委托,因為我認為我是。 但是, paint中的信息永遠不會被打印出來。

我認為您的問題是您沒有將子類的繪制方法聲明為 const。 因此,它不會覆蓋超類方法(const 和 non-const 方法被認為具有彼此不同的簽名),這就是為什么不調用您的 paint 方法的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM