Сбой RubyQt на QTableWidget - PullRequest
       10

Сбой RubyQt на QTableWidget

2 голосов
/ 17 марта 2010

Я получаю некоторые странности с 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 рубиново-1.8.6.369-1.fc11.i586

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

1 Ответ

3 голосов
/ 18 марта 2010

Вы используете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...