最近、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
。
何が問題で、どのように修正できますか?