[Я использую PyQt4, но я думаю, что этот вопрос Qt4 не Python специфичны.]Получить индекс строки QTableWidget зная его элементы
У меня есть QTableWidget
. В каждой строке первый столбец содержит кнопку. При щелчке строка удаляется.
Чтобы удалить строку, я использую метод removeRow(int row)
, который принимает в качестве аргумента индекс строки. При подключении сигнала я не могу знать индекс строки, потому что он может меняться тем временем (например, если первая строка удалена, все индексы строк меняются).
The accepted answer here предлагает передать обратный вызов экземпляр QTableWidgetItem в строке, а затем получить номер строки из этого элемента во время удаления.
Это было бы хорошо, если только ни один из элементов строки не является QTableWidgetItem
. Элементами являются сама кнопка и несколько ComboBoxes.
Я не могу найти способ обойти это.
Могу ли я каким-то образом подогнать один из моих элементов в QTableWidgetItem? Должен ли я добавить QTableWidgetItem в какой-то скрытый столбец?
В нашей текущей реализации используется indexAt(QtGui.qApp.focusWidget())
(см. Другой ответ на вопрос, упомянутый выше), который выглядит как извиняющийся обходной путь для меня.
Если я заменить кнопку с триггерной QTableWidgetItem как этот
rm_item = QtGui.QTableWidgetItem()
rm_item.setFlags(QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsEnabled)
У меня есть QTableWidgetItem я могу использовать, чтобы вернуться к индексу строки. Но я не знаю, как поймать событие «проверено» или «щелкнуть», как я делаю с кнопкой. Все, что я нашел, это сигнал itemClicked
QTableWidget
, но тогда мне придется отфильтровывать все остальные виджеты.
Должно быть что-то очевидное, что мне не хватает.
Редактировать
Из того, что я прочитал here, я мог бы добавить как в QTableWidgetItem с SetItem и кнопки виджет с setCellWidget к одной и той же клетке. Для меня это не кажется таким естественным, но, видимо, это работает (сейчас я не могу проверить).
Думаю, я сделаю это. Добавьте кнопку, а также фиктивный QTableWidgetItem в одну и ту же ячейку, чтобы передать ссылку на строку.
Это как это должно быть?
Edit 2
Или, может быть QTableWidget
не правильный виджет, и я должен быть с помощью Layout
, как это было предложено here.
Это не питон ответ, но я думаю, что мой C++ ответ [здесь] (http://stackoverflow.com/a/29177041/616644) может быть полезным. –