3

我将 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文件(以防树视图需要有我没有的属性集),可以在此处查看

4

3 回答 3

2

显然QPixmap需要包裹在 aQVariant中才能正常工作。这是在 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 上的andrepeppe提供的帮助。

于 2014-10-09T17:20:59.860 回答
2

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

于 2014-10-08T22:56:11.513 回答
0

使用 QTreeWidget 安装的 QTreeView。然后为你的新项目创建一个新的表单类(YourTreeWidgetItem),你喜欢的每一件事,然后这样做:

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

但它是 C++ Qt 代码

于 2014-10-09T06:57:50.703 回答