Simple Tree Model Example
从Qt示例列表中编辑其模型,以便还可以检查某些项;它看起来是这样的:
我想把一些东西稍微移到左边。所以我通过派生
QStyledItemDelegate
QStyledItemDelegate::paint
void TreeItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.column() == 0) {
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
if (childItem->type() == TreeItem::Type::Checkable) {
QStyleOptionViewItem opt = option;
QStyledItemDelegate::initStyleOption(&opt, index);
const int desiredThreshold = 10;
opt.rect.setX(opt.rect.x() - desiredThreshold);
option.widget->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, option.widget);
return;
}
}
return QStyledItemDelegate::paint(painter, option, index);
}
TreeItem::Type::Checkable
将由
desiredThreshold
到现在为止,一直都还不错;一切都很好,画得很好。然而。。。
问题是,尽管项目稍微向左绘制(这是可以的),但是鼠标事件仍然工作,就好像项目根本没有移动一样;其工作原理如下:
是否可以告诉学员整个项目稍微向左绘制,以便当我单击复选框(复选框也与整个项目一起移动)时,模型将正确更新?