Я хотел бы иметь один столбец в QTableWidget
НЕ редактируемый.
На форумах я много читал о некоторых flags
, но не смог реализовать.
Как сделать столбец в QTableWidget только для чтения?
Ответ 1
Вставьте в QTableWidget следующие виды элементов:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
Прекрасно работает!
EDIT:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
Это лучшее решение. Благодаря @priomsrb.
Ответ 2
Результат использования XOR зависит от текущего состояния. Я бы предложил использовать
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
чтобы убедиться, что редактирование отключено независимо от текущей настройки.
Ответ 3
Чтобы применить код @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();
}
}
}
Ответ 4
Я пришел к лучшему предложению, просто заменил сигнал cellDoubleClicked новым SLOT. Это означает, что если вы хотите, чтобы ни одна из камер не была изменена