2016-05-04 5 views
1

С:Как выбрать несколько строк в QTableView с помощью selectionModel

tableView = QTableView() 
rows = [0, 1, 2] 

tableView.selectRow(0) или tableView.selectRow(2) не будет работать в этой ситуации, так как selectRow() выбирает только одну строку Deselecting все остальные.

Доступен способ selectionModel().select(). Но в качестве аргумента он принимает объект QSelectionItem s. Как объявить объект QSelectionItem с номерами строк?

ответ

3

Вы должны установить режим выбора.

tableView->setSelectionMode(QAbstractItemView::MultiSelection); 
+1

Благодаря в режиме выбора установлен в 'MultiSelection' какой со mmand нужно использовать для выбора строки 0 и строки 2, чтобы обе строки были выбраны одинаково? – alphanumeric

+1

Это зависит от того, как вы реализуете. Пользователь будет в состоянии выбрать оба одновременно. Попробуйте tableView-> setSelectionBehavior (QAbstractItemView :: SelectItems); –

+1

Еще раз спасибо! Я хотел бы знать, как выбрать несколько элементов в QTableView изнутри функции (кода) (а не из взаимодействия пользователя). Извините за то, что я не понимаю. – alphanumeric

1

код создает QTableView и QPushButton. Нажатие кнопки выбирает индексы в непрерывном порядке (от index1 до index2. Это еще unswered вопрос, если можно было бы выбрать индексы в любом порядке.

enter image description here

def clicked(): 
    tableView.setFocus() 
    selectionModel = tableView.selectionModel() 
    index1 = tableView.model().index(0, 0) 
    index2 = tableView.model().index(1, 2) 
    itemSelection = QtGui.QItemSelection(index1, index2) 
    selectionModel.select(itemSelection, QtGui.QItemSelectionModel.Rows | QtGui.QItemSelectionModel.Select) 

app = QtGui.QApplication([]) 
window = QtGui.QWidget() 
window.resize(400, 300) 
tableView = QtGui.QTableView() 

model = QtGui.QStandardItemModel(4, 2) 
for row in range(0, 4): 
    for column in range(0, 3): 
     item = QtGui.QStandardItem("%s , %s"%(row, column)) 
     model.setItem(row, column, item) 

tableView.setModel(model) 

selectionModel = QtGui.QItemSelectionModel(model) 
tableView.setSelectionModel(selectionModel) 

button = QtGui.QPushButton('Select from 0,0 to 1,2') 
button.clicked.connect(clicked) 
layout = QtGui.QVBoxLayout() 
layout.addWidget(tableView) 
layout.addWidget(button) 
window.setLayout(layout) 
window.show() 

app.exec_() 
0

select() может также принимать индекс (и режим выбранных строк), так что вы можете сделать это:

rows = [1,2,3] 
indexes = [model.index(r, 0) for r in rows] 
mode = QtCore.QItemSelectionModel.Select | QtCore.QItemSelectionModel.Rows 
[tableView.selectionModel().select(index, mode) for i in indexes] 
Смежные вопросы