在QTreeView中显示文本前的图标

时间:2014-10-08 22:09:30

标签: ruby qt treeview qtreeview qtruby

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

我正在为图标的位置分配空间,但我没有看到任何图标。我需要做些什么才能让他们出现? tree view with 2 columns, but no icons

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

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文件(如果树视图需要具有我没有的属性集),则可以是seen here

3 个答案:

答案 0 :(得分:1)

我认为使用指定的路径无法找到图像。使用QFileInfo::exists()验证它。

答案 1 :(得分:1)

使用QTreeWidget而不是QTreeView。 然后为你的新项目,你喜欢的每件事创建一个新的表格classY qTreeWidgetItem,然后这样做:

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

但它是c ++ Qt代码

答案 2 :(得分:1)

显然QPixmap需要包含在QVariant中才能正常使用。这是在QtRuby中使用Qt::Variant.fromValue()

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

感谢#qt irc.freenode.net上的 andre peppe 以帮助解决此问题。 < / p>