Общее выделение у нескольких QTableWidget
Работаю в Qt 5.6.1. Есть несколько таблиц QTableWidget, по идее они представляют собой одну таблицу - расположены вплотную, и данные по строкам взаимосвязаны, но они должны быть представлены как отдельные виджеты. Флаг выделения у них стоит SelectRows, и мод ExtendedSelection. Как мне сделать у них общее выделение? Допустим, выделил несколько строк первой таблицы - выделил те же строки в других. Выделение должно убираться соответственно. Я пытался обработать сигнал selectionChanged у selectionModel таблиц таким образом:
void wSpisokActive::selectionChangedMain(const QItemSelection &selected, const QItemSelection &deselected)
{
permission_to_changed_main_ = false; // флаг для выхода из подобного слота в другой таблице
if (permission_to_changed_monitoring_) { // выделить строки
QModelIndexList selected_list = selected.indexes();
for (QModelIndex model_index: selected_list) {
ui->tbMonitoring->selectRow(model_index.row());
}
QModelIndexList deselected_list = deselected.indexes();
int last_row = -1;
for (QModelIndex model_index: deselected_list) { // снять выделение строк
if (last_row == model_index.row()) continue;
last_row = model_index.row();
for (int i = 0; i < ui->tbMonitoring->columnCount(); ++i) {
ui->tbMonitoring->selectionModel()->select(ui->tbMonitoring->model()->index(last_row, i), QItemSelectionModel::Deselect);
}
}
}
permission_to_changed_main_ = true;
}
Но таким образом неправильно обрабатывается выделение через Ctrl. Также при выделении нескольких строк выделяется только последняя - пробовал перед выделением строк устанавливать ui->tbMonitoring->setSelectionMode(QAbstractItemView::MultiSelection);, а после ui->tbMonitoring->setSelectionMode(QAbstractItemView::ExtendedSelection);. Но не помогло.
Ответы (1 шт):
Ответ дан на stackoverflow.com. Спасибо, @Atmo и @musicamante.
Нужно будет использовать QTableView и добавить им общую модель через setModel и selectionModel.