【发布时间】:2016-01-13 16:19:57
【问题描述】:
最近我使用 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 内部。
问题是什么?如何解决?
【问题讨论】: