Сбой RubyQt на QTableWidget

Я получаю некоторые странности с QtRuby при использовании TableWidget. Виджет таблицы загружается, но когда вы нажимаете на элементы в строке, приложение происходит сбой и вылетает.

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 ruby-1.8.6.369-1.fc11.i586

Эти сбои также случаются при запуске скрипта в Windows.

1 ответ

Решение

Вы используете Qt::TableWidget, когда вы должны использовать Qt::TableView. Следующий код исправил ошибку для меня. В дополнение к переключению с Qt::TableWidget на Qt:: TableView я также переопределил метод index, на всякий случай.:)

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
Другие вопросы по тегам