最近我用 Ruby 和 Qt 编写了一个小应用程序。这是我使用 qtruby 的第一个重要项目。一段时间后,我设法将 C++ 参考和教程翻译成可工作的 Ruby 代码,并且掌握了窍门。
只有在小部件中实现我自己的拖放功能时 QTreeView
,我才真正陷入困境。我可以将问题隔离到Qt::AbstractItemModel::mimeData
方法上。在消除了一些其他错误之后,我最终得到了以下代码,它以某种方式导致应用程序在拖动操作发生时立即崩溃。
class TreeModel < Qt::AbstractItemModel
def mimeData(indexlist)
encodedData = Qt::ByteArray.new("")
stream = Qt::DataStream.new(encodedData, Qt::IODevice::WriteOnly)
indexlist.each do |index|
if index.column == 0
if index.isValid
stream << index.item.mime_data.to_json
end
end
end
mimeData = Qt::MimeData.new
mimeData.setData("application/x-tegi.json", encodedData)
mimeData
end
end
崩溃似乎是不确定的,有几次代码才起作用。错误转储和回溯没有给我提示,只是崩溃发生在里面QApplication::exec
。
问题是什么?如何解决?