在QTreeView中显示文本之前的图标

我正在使用QtRuby和Qt 4.8.6并尝试创建一个树视图,其中每个项目在树控件和名称之间都有一个自定义图标。 最终结果应该是这样的:
在每个项目之前的图标的树视图

我正在为图标的位置分配空间,但我没有看到任何图标。 我需要做些什么才能让它们出现?
树视图有2列,但没有图标

这是我的代码(稍微简化以删除无数据边缘情况):

class MyModel < Qt::AbstractItemModel # ... def data(index, role) case role when Qt::DisplayRole case index.column when 0; Qt::Variant.new(index.internalPointer.displayName) when 1; Qt::Variant.new(index.internalPointer.displayType) end when Qt::DecorationRole if index.column==0 then # Just testing to show a static icon for all items Qt::Pixmap.new(':/resources/images/Objects-Scene-Normal.png') end end end end @mytreeview.model = MyModel.new 

如果你想检查Qt Designer .ui文件(如果树视图需要有一个我没有的属性集),可以在这里看到 。

我认为使用指定的路径找不到图像。 使用QFileInfo :: exists()validation它。

使用QTreeWidget的QTreeWidget。 然后为你的新项目,你喜欢的每件事创建一个新的表单类(YourTreeWidgetItem),然后执行以下操作:

 YourTreeWidgetItem* wItem = new YourTreeWidgetItem; treeWidget->setItemWidget(wItem); 

但它是c ++ Qt代码

显然, QPixmap需要包装在QVariant才能正常工作。 这是通过使用Qt::Variant.fromValue()在QtRuby中完成的:

 when Qt::DecorationRole if index.column==0 then Qt::Variant.fromValue( Qt::Pixmap.new(':/path/to/resource') ) 

感谢#qt irc.freenode.net上的andrepeppe帮助解决这个问题。