2014-10-05 67 views
2

使用QtRuby(通過qtbindings)我試圖將項目添加到QTreeWidget。它說,它有一個insertTopLevelItems()方法,但它沒有對此作出迴應:在Qt :: TreeWidget中插入項目

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

+0

一種解決方法是直接在其創作過程中插入的項目,像這樣:'Qt :: TreeWidgetItem.new(hier){set_text 0,「My Label」}' – Phrogz 2014-10-06 00:54:32

回答

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