Недавно я написал небольшое приложение с использованием Ruby и Qt. Это был мой первый нетривиальный проект с qtruby. Через некоторое время мне удалось перевести ссылки на C++ и учебные пособия в рабочий код Ruby, и он повесился.Ошибка приложения Qt/Ruby в Qt :: AbstractItemModel :: mimeData - Как найти и исправить причину?
Только при реализации моей собственной функции перетаскивания в QTreeView
виджетах, я действительно застрял. Я мог бы изолировать проблему до метода Qt::AbstractItemModel::mimeData
. После устранения некоторых других ошибок я получил следующий код, который каким-то образом вызвал ошибку crash, как только произошло действие перетаскивания.
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
Крушение оказалось недетерминированным, несколько раз только что сработавший код. Ошибка дампа и backtrace не дали мне подсказки, только, что авария произошла внутри QApplication::exec
.
В чем проблема и как ее можно исправить?