我有一个QListView
,其中我将模型设置为自定义QAbstractItemModel
和自定义QStyledItemDelegate
。
ui->listView->setModel(model);
ui->listView->setItemDelegate(new Delegate(ui->listView));
我按照this great answer的说明正确设置了委托,因此重载了paint()
和sizeHint()
:
x一个一个一个一个x一个一个二个x
当我向模型中添加一个项目时,它会被正确地传播到QListView
,并且委托会打印以下内容:
sizeHint: 1551x87
sizeHint: 0x0
paint: 0x0
我添加的每一个新项目都会绘制在以前项目的上面,并且不会绘制背景,因为option.rect
是0x0
。
我尝试过更改QListView
的一系列与大小相关的属性,但都无济于事。
那么,为什么传递的QStyleOptionViewItem
具有0x0
的rect
,或者一般来说,QStyleOptionViewItem
从哪里获得其属性?Qt的paint
文档和sizeHint
文档对此似乎不是很清楚。
先谢了!
1条答案
按热度按时间368yc8dk1#
问题是在模型中发现的(
columnCount()
计算错误)。因此,如果您遇到相同的问题,请尝试检查模型实现。通过使用默认的
QListView
委托,即使我使用Qt::DisplayRole
,也不会打印任何内容。这样,问题就被隔离到了模型中,而不是视图或委托中。