Anonymous
Как получить всю выбранную строку в прокси-модели Qt?
Сообщение
Anonymous » 14 янв 2025, 13:11
Приведенный ниже код представляет собой рабочий QTableView, использующий QAbstractTableModel, который использует QSortFilterProxyModel. Мне удалось выяснить, как получить данные из одной ячейки выбранной строки, а не из всей строки сразу (например, в виде списка строк). . Подскажите, пожалуйста, что можно попробовать?
(Я использую Python, но если кто-то знает, как это сделать на другом языке, я попробуй перевести...)
Код: Выделить всё
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys
class CustomTableModel(QAbstractTableModel):
def __init__(self, cells=[[]], headers=[]):
super(CustomTableModel, self).__init__()
self._cells = cells
self._headers = headers
def data(self, index, role):
if index.isValid() and (role == Qt.DisplayRole):
return self._cells[index.row()][index.column()]
def rowCount(self, parent=None):
return len(self._cells)
def columnCount(self, parent=None):
return len(self._headers)
def flags(self, index):
return Qt.ItemIsEnabled | Qt.ItemIsSelectable
class CustomSortFilterProxyModel(QSortFilterProxyModel):
def __init__(self):
super(CustomSortFilterProxyModel, self).__init__()
def get_selected_row(self):
# Unsure what to put here??
pass
def table_clicked():
selected_indexes = table_view.selectionModel().selectedRows()
first_cell_selected = proxy_model.data(proxy_model.index(selected_indexes[0].row(), 0), Qt.DisplayRole).toString()
print(first_cell_selected)
# But rather than the above I would like to be able to do something like:
print(proxy_model.get_selected_row())
# and for it to print out everything in the row e.g. ['Cell 1', 'Cell 2', 'Cell 3']
app = QApplication(sys.argv)
table_data = [["Cell 1", "Cell 2", "Cell 3"], ["Cell 4", "Cell 5", "Cell 6"]]
table_headers = ["Header 1", "Header 2", "Header 3"]
model = CustomTableModel(table_data, table_headers)
proxy_model = CustomSortFilterProxyModel()
proxy_model.setDynamicSortFilter(True)
proxy_model.setSourceModel(model)
table_view = QTableView()
table_view.setModel(proxy_model)
table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
table_view.setSelectionMode(QAbstractItemView.SingleSelection)
table_view.setSortingEnabled(True)
table_view.clicked.connect(table_clicked)
table_view.show()
sys.exit(app.exec_())
Это может быть связано с тем, как получить номер индексной строки из исходной модели
Подробнее здесь:
https://stackoverflow.com/questions/355 ... roxy-model
1736849481
Anonymous
Приведенный ниже код представляет собой рабочий QTableView, использующий QAbstractTableModel, который использует QSortFilterProxyModel. Мне удалось выяснить, как получить данные из одной ячейки выбранной строки, а не из всей строки сразу (например, в виде списка строк). . Подскажите, пожалуйста, что можно попробовать? (Я использую Python, но если кто-то знает, как это сделать на другом языке, я попробуй перевести...) [code]from PyQt4.QtCore import * from PyQt4.QtGui import * import sys class CustomTableModel(QAbstractTableModel): def __init__(self, cells=[[]], headers=[]): super(CustomTableModel, self).__init__() self._cells = cells self._headers = headers def data(self, index, role): if index.isValid() and (role == Qt.DisplayRole): return self._cells[index.row()][index.column()] def rowCount(self, parent=None): return len(self._cells) def columnCount(self, parent=None): return len(self._headers) def flags(self, index): return Qt.ItemIsEnabled | Qt.ItemIsSelectable class CustomSortFilterProxyModel(QSortFilterProxyModel): def __init__(self): super(CustomSortFilterProxyModel, self).__init__() def get_selected_row(self): # Unsure what to put here?? pass def table_clicked(): selected_indexes = table_view.selectionModel().selectedRows() first_cell_selected = proxy_model.data(proxy_model.index(selected_indexes[0].row(), 0), Qt.DisplayRole).toString() print(first_cell_selected) # But rather than the above I would like to be able to do something like: print(proxy_model.get_selected_row()) # and for it to print out everything in the row e.g. ['Cell 1', 'Cell 2', 'Cell 3'] app = QApplication(sys.argv) table_data = [["Cell 1", "Cell 2", "Cell 3"], ["Cell 4", "Cell 5", "Cell 6"]] table_headers = ["Header 1", "Header 2", "Header 3"] model = CustomTableModel(table_data, table_headers) proxy_model = CustomSortFilterProxyModel() proxy_model.setDynamicSortFilter(True) proxy_model.setSourceModel(model) table_view = QTableView() table_view.setModel(proxy_model) table_view.setSelectionBehavior(QAbstractItemView.SelectRows) table_view.setSelectionMode(QAbstractItemView.SingleSelection) table_view.setSortingEnabled(True) table_view.clicked.connect(table_clicked) table_view.show() sys.exit(app.exec_()) [/code] Это может быть связано с тем, как получить номер индексной строки из исходной модели Подробнее здесь: [url]https://stackoverflow.com/questions/35593800/how-do-i-get-the-entire-selected-row-in-a-qt-proxy-model[/url]