Сбой 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