我正在使用QtRuby和Qt 4.8.6并尝试创建一个树视图,其中每个项目在树控件和名称之间都有一个自定义图标。最终结果应该是这样的:
我正在为图标的位置分配空间,但我没有看到任何图标。我需要做些什么才能让他们出现?
这是我的代码(略微简化以删除无数据边缘情况):
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。
答案 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>