QTreeView单个行的自定义行高
是否可以在QTreeView单个行的自定义行高,qt,qt4,qt5,Qt,Qt4,Qt5,是否可以在QTreeView中重新定义某些单独行的行高 我有一个自定义的QTreeView、自定义的qabstractemodel和一个自定义的QStyledItemDelegate,但是似乎所有的sizeHint方法要么只调用一次(最初),要么在基类中不是虚拟的 Qt版本4.7.4,不可能升级到5 感谢您的帮助。重新实现学员的sizeHint()。在我的一些产品代码中找到了一个示例。它显示在下面。在本例中,树可能包含图像。因此,需要调整单元大小以承载图像 class ItemDelegate
QTreeView
中重新定义某些单独行的行高
我有一个自定义的QTreeView
、自定义的qabstractemodel
和一个自定义的QStyledItemDelegate
,但是似乎所有的sizeHint
方法要么只调用一次(最初),要么在基类中不是虚拟的
Qt版本4.7.4,不可能升级到5
感谢您的帮助。重新实现学员的sizeHint()。在我的一些产品代码中找到了一个示例。它显示在下面。在本例中,树可能包含图像。因此,需要调整单元大小以承载图像
class ItemDelegate : public QItemDelegate
{
public:
QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
const TreeItem* ti(static_cast<TreeItem*>(index.internalPointer()));
if(ti->pixmap())
return ti->pixmap()->size();
QItemDelegate::sizeHint(option,index);
}
};
重新实现代理的sizeHint()。在我的一些产品代码中找到了一个示例。它显示在下面。在本例中,树可能包含图像。因此,需要调整单元大小以承载图像
class ItemDelegate : public QItemDelegate
{
public:
QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
const TreeItem* ti(static_cast<TreeItem*>(index.internalPointer()));
if(ti->pixmap())
return ti->pixmap()->size();
QItemDelegate::sizeHint(option,index);
}
};
存在SizeHintRole,当请求此角色时,尝试在data()方法中返回QSize(int,int)。相同的行为:data()方法仅使用SizeHintRole集调用一次!所以,若你们需要再次调用数据来更新某些东西,那个么通常的做法是用模型中需要的QModelIndex发出dataChanged信号,不是吗?也许我不够明确。带有
sizeIntrole
集合的qabstractemmodel::data()
方法对于完整的树只调用一次,而不是像预期的那样针对每个项调用一次。是的,只要模型中的数据发生变化,我就会发出dataChanged
信号。当前,模型在初始化期间仅更改一次。存在SizeIntrole,请在请求此角色时尝试在data()方法中返回QSize(int,int)。相同的行为:data()方法仅使用SizeIntrole集调用一次!所以,若你们需要再次调用数据来更新某些东西,那个么通常的做法是用模型中需要的QModelIndex发出dataChanged信号,不是吗?也许我不够明确。带有sizeIntrole
集合的qabstractemmodel::data()
方法对于完整的树只调用一次,而不是像预期的那样针对每个项调用一次。是的,只要模型中的数据发生变化,我就会发出dataChanged
信号。目前,模型在初始化期间只更改一次。我已经重新实现了sizeHint
方法。问题是,对于完整的树(即,仅对根QModelIndex
)只调用一次此方法,这样所有行的大小都相同。@mefiX可能,您放弃了@SaZ:您是正确的。事实上,这可能就是答案。@SaZ:你是对的,我一定是碰巧将uniformRowHeight
属性设置为true。关闭它解决了我的问题。我已经重新实现了sizeHint
方法。问题是,对于完整的树(即,仅对根QModelIndex
)只调用一次此方法,这样所有行的大小都相同。@mefiX可能,您放弃了@SaZ:您是正确的。事实上,这可能就是答案。@SaZ:你是对的,我一定是碰巧将uniformRowHeight
属性设置为true。关掉它解决了我的问题。