Проблема заключается в том, что бросок - это проверка времени выполнения, но из-за стирания типа во время выполнения нет никакой разницы между HashMap & lt; String, String & gt;
и HashMap & lt; Foo, Bar & gt;
для любых других Foo
и Bar
.
Используйте @SuppressWarnings («unchecked»)
и удерживайте твой нос. О, и кампания для реинфицированных дженериков в Java:)
Существует ряд подходов, которые могли бы решить эту проблему. Некоторые из них могут включать расположение курсора, а другие могут попасть в таблицы событий и сигналов. Проблема с использованием QCursor для решения этой проблемы заключается в том, что кто-то запускает кнопку с клавиатурой, а не щелчком мыши, что означает, что позиция курсора может не соответствовать правильной строке.
Поскольку вы уже используете высокий уровень QTableWidget
, то здесь это действительно простой способ сделать это:
from functools import partial
class Table(QtGui.QWidget):
def __init__(self):
super(Table, self).__init__()
self.table = QtGui.QTableWidget(3, 2, self)
for row in xrange(3):
item = QtGui.QTableWidgetItem("Item %d" % row)
self.table.setItem(row, 0, item)
button = QtGui.QPushButton("X", self.table)
self.table.setCellWidget(row, 1, button)
button.clicked.connect(partial(self._buttonItemClicked, item))
layout = QtGui.QHBoxLayout(self)
layout.addWidget(self.table)
def _buttonItemClicked(self, item):
print "Button clicked at row", item.row()
В этом примере мы просто выпекаем элемент первого столбца в вызванный щелчком обратный вызов, поэтому, когда вы щелкните их, у них есть ссылка для запроса номера строки. Этот подход будет отличаться для модели / представления более низкого уровня.
Вероятно, вам нужно использовать сигнал cellEntered
и слот removeRow
(если вы используете QTableWidget
). См. Здесь docs здесь для PySide и здесь для PyQt. Вам также может понадобиться найти эту тему в Qt docs здесь .
Предполагая, что удаление предполагается, например, при щелчке мыши все представления имеют метод indexAt , который будет отображать любое местоположение курсора / мыши в индекс модели:
modelIndex = myView.indexAt(cursorLocation) # where cursorLocation is a QPoint instance
С этим легко вносить изменения к модели.
В качестве альтернативы, подобно ответу дору, представления также реализуют сигнал entered
и другие, уведомляя вас о действиях мыши на определенной модели indexex:
http : //qt-project.org/doc/qt-4.8/qabstractitemview.html#signals
QTableWidgetItem
, который может отслеживать строку. – jdi 14 April 2015 в 22:23