2

TableWidgetを使用すると、QtRubyで奇妙なことが起こります。テーブルウィジェットは読み込まれますが、行の要素をクリックすると、アプリがsegfaultしてクラッシュします。

require 'Qt4'

class SimpleModel < Qt::AbstractTableModel

    def rowCount(parent)
        return 1
    end

    def columnCount(parent)
        return 1
    end

    def data(index, role=Qt::DisplayRole)
        return Qt::Variant.new("Really Long String") if index.row == 0 and index.column == 0 and role == Qt::DisplayRole
        return Qt::Variant.new
    end

end

Qt::Application.new(ARGV) do
    Qt::TableWidget.new(1, 1) do
        set_model SimpleModel.new
        show
    end

    exec

end

バックトレースは、mousePressEventで爆撃されていることを示しているようです

#6  0x01624643 in QAbstractItemView::pressed(QModelIndex const&) () from /usr/lib/libQtGui.so.4

#7  0x016306f5 in QAbstractItemView::mousePressEvent(QMouseEvent*) () from /usr/lib/libQtGui.so.4

mousePressEventとmouseMoveEventをオーバーライドすると、この種のクラッシュは発生しなくなります。私はここで何か間違ったことをしていますか、それともQtRubyのバグとしてこれをチョークで書くことができますか?

私はfedora11を使用しており、次のパッケージがインストールされています。

QtRuby-4.4.0-1.fc11.i586ルビー-1.8.6.369-1.fc11.i586

これらのクラッシュは、Windowsでスクリプトを実行しているときにも発生します。

4

1 に答える 1

3

Qt :: TableViewを使用する必要があるときに、Qt::TableWidgetを使用しています。次のコードは私のためにクラッシュを修正しました。Qt::TableWidgetからQt::TableViewへの切り替えに加えて、念のため、インデックスメソッドも再実装しました。:)

require 'Qt4'

class SimpleModel < Qt::AbstractTableModel

    def rowCount(parent)
        return 1
    end

    def columnCount(parent)
        return 1
    end

    def data(index, role=Qt::DisplayRole)
        return Qt::Variant.new("Really Long String") if index.row == 0 and index.column == 0 and role == Qt::DisplayRole
        return Qt::Variant.new
    end

    def index(row, column, parent)
        if (row > 0 || column > 0)
            return Qt::ModelIndex.new
        else
            return createIndex(row, column, 128*row*column)
        end
    end 
end

Qt::Application.new(ARGV) do
    Qt::TableView.new do
        set_model SimpleModel.new
        show
    end

    exec
end
于 2010-03-18T02:42:49.830 に答える