c++ QStyledItemDelegate::paint -为什么传递的QStyleOptionViewItem具有大小为0x 0的rect属性?

ru9i0ody  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个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.rect0x0
我尝试过更改QListView的一系列与大小相关的属性,但都无济于事。
那么,为什么传递的QStyleOptionViewItem具有0x0rect,或者一般来说,QStyleOptionViewItem从哪里获得其属性?Qt的paint文档和sizeHint文档对此似乎不是很清楚。
先谢了!

368yc8dk

368yc8dk1#

问题是在模型中发现的(columnCount()计算错误)。因此,如果您遇到相同的问题,请尝试检查模型实现。
通过使用默认的QListView委托,即使我使用Qt::DisplayRole,也不会打印任何内容。这样,问题就被隔离到了模型中,而不是视图或委托中。

相关问题