rendered paste bodyrequire 'Qt4'class MyTree < Qt::Widgetdef initialize(*args) super(*args) @lay = Qt::VBoxLayout.new self @tree_widget = Qt::TreeWidget.new self @tree_widget.setColumnCount 5 @tree_widget.setHeaderLabels ['Sub Group' , 'Title' , 'Artist' , 'Album' , 'Genre'] @lay.addWidget @tree_widget add_childend def add_child( child = nil , parent = @tree_widget) child||={"artist2"=> {"album3"=> {"genre1"=> [["song5", "artist2", "album3", "genre1"], ["song4", "artist2", "album3", "genre1"]]}}, "artist3"=>{"album4"=>{"genre2"=>[["song2", "artist3", "album4", "genre2"]]}}, "artist1"=> {"album1"=>{"genre1"=>[["song1", "artist1", "album1", "genre1"]]}, "album2"=>{"genre2"=>[["song3", "artist1", "album2", "genre2"]]}}} child.each{|group, sub_child| item = Qt::TreeWidgetItem.new parent , Qt::TreeWidgetItem::Type item.setText(0, group) case sub_child when Hash # sub_group add_child sub_child , item when Array # leaf list sub_child.each{|el| leaf_item = Qt::TreeWidgetItem.new item , Qt::TreeWidgetItem::Type el.each_with_index{|v,i| leaf_item.setText(i + 1, v.to_s)} } end }endendapp = Qt::Application.new ARGVtree = MyTree.newtree.showapp.exec