2

使用 QtRuby (通过qtbindings)我正在尝试将项目添加到QTreeWidget. 它说它有一个insertTopLevelItems()方法,但它没有响应它:

hier = $my.appHierarchy
hier.column_count = 2
hier.header_labels = ['element', 'kind']
p hier.class, hier.methods.grep(/insert/)
#=> Qt::TreeWidget
#=> ["insertAction", "insertActions", "insertTopLevelItem", "insertTopLevelItems"]

hier.insertTopLevelItems ['x','y']
#=> in `method_missing': undefined method `insertTopLevelItems' for #<Qt::TreeWidget:0x007fc6c9153528> (NoMethodError)

如何将项目添加到此小部件?


红宝石 2.0.0p353; Qt 4.8.6;OS X 10.9.5

4

1 回答 1

1

您收到method missing是因为您的参数类型错误。与 Ruby 不同,C++ 需要匹配参数和结果类型,qtruby 包装器也是如此。

调用时insertTopLevelItems您缺少索引参数,您必须Qt::TreeWidgetItem从每个字符串构建一个。如果树为空,addTopLevelItem(...则执行相同的操作insertTopLevelItem(0,...

这里有一些示例代码可以尝试:

(1..10).each do |n|
  item = Qt::TreeWidgetItem.new
  item.setText(0, "item #{n}/1")
  item.setText(1, "item #{n}/2")
  hier.insertTopLevelItem(0, item)
  #  hier.addTopLevelItem(item)  # same effect as previous line
end

或者

itemlist = (1..10).collect do |n|
  item = Qt::TreeWidgetItem.new
  item.setText(0, "item #{n}/1")
  item.setText(1, "item #{n}/2")
  item
end
hier.insertTopLevelItems(0, itemlist)
#  hier.addTopLevelItems(itemlist)  # same effect as previous line
于 2016-01-09T18:43:46.367 回答