Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QTreeView单个行的自定义行高_Qt_Qt4_Qt5 - Fatal编程技术网

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。关掉它解决了我的问题。