Как сделать столбец в QTableWidget только для чтения?
Я хотел бы иметь один столбец в QTableWidget
не редактировать.
На форумах я много читал о некоторых flags
но не удалось реализовать.
4 ответа:
вставьте в QTableWidget следующие элементы:
QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
работает отлично!
EDIT:
QTableWidgetItem *item = new QTableWidgetItem(); item->setFlags(item->flags() ^ Qt::ItemIsEditable);
Это лучшее решение. Спасибо @priomsrb.
результат использования XOR зависит от текущего состояния. Я бы предложил использовать
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
чтобы убедиться, что редактирование отключено, независимо от текущей настройки.
Я пришел к лучшему предложению, просто перезаписать сигнал cellDoubleClicked с новым слотом. Это, если вы хотите, чтобы ни одна из ячеек не была изменена
чтобы применить код @Narek к строкам или столбцам, просто используйте простой цикл for и поместите условие, чтобы включить флаги для строк/столбцов, которые вы не хотите редактировать.
следующий код считывает csv-файл в QTableWidget:
if(!rowOfData.isEmpty()){ for (int x = 0; x < rowOfData.size(); x++) { rowData = rowOfData.at(x).split(","); if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x); for (int y = 0; y < rowData.size(); y++) { QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type); if( y < 3 ) item->setFlags(item->flags() ^ Qt::ItemIsEditable); // Only disables the first three columns for editing, but allows the rest of the columns to be edited ui->table_Data->setItem(x,y,item); ui->table_Data->repaint(); } } }