Je voudrais avoir une colonne dans QTableWidget
NOTeditable.
Sur les forums, j’ai beaucoup lu à propos de flags
mais je n’arrivais pas à mettre en œuvre.
Insérer dans le QTableWidget le type d’éléments suivant:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
Fonctionne bien!
MODIFIER:
QTableWidgetItem *item = new QTableWidgetItem();
item->setFlags(item->flags() ^ Qt::ItemIsEditable);
C'est une meilleure solution. Merci à @priomsrb.
Le résultat de l'utilisation de XOR dépend de l'état actuel. Je suggère d'utiliser
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
pour vous assurer que l’édition est désactivée quel que soit le réglage actuel.
Je suis venu à une meilleure suggestion, écrasez simplement le signal cellDoubleClicked avec un nouveau SLOT . Ceci est, si vous voulez qu'aucune des cellules ne soit modifiée
Pour appliquer le code de @ Narek à des lignes ou à des colonnes, utilisez simplement une simple boucle for et définissez une condition pour inclure les indicateurs des lignes/colonnes que vous ne souhaitez pas pouvoir modifier.
Le code suivant lit un fichier csv dans 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();
}
}
}