example - ¿Cómo hacer que una columna en QTableWidget solo sea de lectura?
qtablewidget pyqt5 (4)
El resultado de usar XOR depende de cuál es el estado actual. Sugeriría usar
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
para asegurarse de que la edición esté desactivada independientemente de la configuración actual.
Me gustaría tener una columna en QTableWidget
NO editable.
En los foros he leído mucho sobre algunos flags
pero no he podido implementarlos.
Inserte en el QTableWidget siguiente tipo de elementos:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
¡Funciona bien!
EDITAR:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
Esta es una mejor solución. Gracias a @priomsrb.
Llegué a una sugerencia mejor, simplemente sobrescribí la señal cellDoubleClicked con una nueva SLOT. Esto es, si no quiere que se modifique ninguna de las celdas
Para aplicar el código de @Narek a filas o columnas, simplemente use un bucle for simple y ponga una condición para incluir los indicadores para filas / columnas que no desea que sean editables.
El siguiente código lee un archivo csv en un 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();
}
}
}