【问题标题】:Inserting items in a Qt::TreeWidget在 Qt::TreeWidget 中插入项目
【发布时间】:2014-10-05 00:03:31
【问题描述】:

使用 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

【问题讨论】:

  • 一种解决方法是在项目创建期间直接插入项目,如下所示:Qt::TreeWidgetItem.new(hier){ set_text 0, "My Label" }

标签: ruby qt qtruby


【解决方案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

【讨论】:

    猜你喜欢
    • 2014-09-13
    • 1970-01-01
    • 2017-04-18
    • 2012-05-29
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多