[英]C++ Qt: QStyledItemDelegate's createEditor is never called, although paint() is called
[英]Qt subclassed QStyledItemDelegate paint method is never called
更新:我的繪畫方法不是 const
我有一個連接到QAbstractTableModel
的自定義QTableView
。
我最近創建了一個QStyledItemDelegate
子類,它的paint
方法打印一條調試消息,然后它調用父繪制,然后它打印另一條調試消息。
我已經調用了view->setItemDelegate
並且我檢查了我視圖中的項目委托是我給它的那個(只是為了確定)。
但是,我的程序只是以與以前相同的方式呈現事物,並且從未在paint
中打印調試消息。 它確實在委托的構造函數中打印了一條調試消息,所以我知道如果 function 曾經被調用,它應該打印。
這是我的代碼的精簡版本,讓我知道其中一個:
謝謝!
這是整個 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.