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 に答える